// 文档 https://github.com/hooke007/MPV_lazy/wiki/4_GLSL

// CuNNy 4x32 DS (dp4a)
// Copyright (c) 2024 funnyplanter

// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 3.0 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this program.  If not, see <https://www.gnu.org/licenses/>.
/* ------------------------------------------------------------------- */


//!DESC [CuNNy_4x32_DS_vk] -in
//!HOOK LUMA
//!COMPUTE 32 16 8 8
//!BIND LUMA
//!SAVE in
//!WIDTH LUMA.w 4 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
#ifdef GL_EXT_shader_explicit_arithmetic_types_float16
#	define V4 f16vec4
#	define M4 f16mat4
#	define F float16_t
#else
#	define V4 vec4
#	define M4 mat4
#	define F float
#endif
#define l0(x, y) F((LUMA_mul * texelFetch(LUMA_raw, clamp(pos + ivec2(x, y), ivec2(0), sz) * ivec2(1, 1) + ivec2(0, 0), 0)).r)
shared F G[1][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(4, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			G[0][ay][ax] = l0(x - 1, y - 1);
		}
	}
	barrier();
	F s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2;
	V4 r0, r1, r2, r3, r4, r5, r6, r7;
	r0 = V4(0.0); r1 = V4(0.0); r2 = V4(0.0); r3 = V4(0.0); r4 = V4(0.0); r5 = V4(0.0); r6 = V4(0.0); r7 = V4(0.0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2];
	r0 += V4(1.716e-02, 3.114e-02, 2.006e-03, 4.595e-01) * s0_0_0;
	r1 += V4(-1.695e-01, 4.963e-03, -8.582e-03, 1.909e-01) * s0_0_0;
	r2 += V4(1.020e-01, 7.901e-03, 3.106e-02, 7.357e-02) * s0_0_0;
	r3 += V4(4.919e-02, 4.054e-02, 1.271e-03, -2.155e-02) * s0_0_0;
	r4 += V4(5.812e-03, -1.207e-02, -4.118e-02, 2.046e-01) * s0_0_0;
	r5 += V4(-5.937e-02, 2.945e-02, 2.143e-01, 2.982e-01) * s0_0_0;
	r6 += V4(4.730e-02, -1.122e-01, -1.519e-01, -1.822e-04) * s0_0_0;
	r7 += V4(1.259e-02, -9.426e-02, 3.123e-02, -1.230e-02) * s0_0_0;
	r0 += V4(-2.795e-02, -6.221e-02, -1.413e-02, -2.611e-01) * s0_0_1;
	r1 += V4(5.723e-01, 3.803e-01, 4.248e-01, 2.494e-01) * s0_0_1;
	r2 += V4(-2.278e-02, 6.312e-01, 2.966e-01, 3.711e-01) * s0_0_1;
	r3 += V4(-5.671e-02, -2.242e-02, 4.807e-03, 5.848e-02) * s0_0_1;
	r4 += V4(3.501e-02, 4.060e-03, -3.975e-01, -2.744e-01) * s0_0_1;
	r5 += V4(1.101e-01, -4.041e-02, 4.569e-01, -8.934e-04) * s0_0_1;
	r6 += V4(-8.164e-02, -1.766e-01, 1.343e-01, 8.471e-04) * s0_0_1;
	r7 += V4(-4.120e-02, 1.241e-01, -1.698e-01, 3.284e-03) * s0_0_1;
	r0 += V4(-4.846e-02, 2.228e-02, 1.715e-02, -2.124e-01) * s0_0_2;
	r1 += V4(-3.944e-02, 1.004e-01, -1.122e-02, -2.536e-01) * s0_0_2;
	r2 += V4(3.800e-02, -2.592e-03, 1.649e-01, 9.030e-02) * s0_0_2;
	r3 += V4(2.333e-03, -1.118e-02, -8.854e-03, -7.420e-02) * s0_0_2;
	r4 += V4(-6.513e-02, 6.642e-03, 4.376e-01, 6.569e-02) * s0_0_2;
	r5 += V4(-4.640e-02, 1.298e-02, 2.625e-02, -6.132e-02) * s0_0_2;
	r6 += V4(4.358e-02, -2.165e-02, -3.500e-02, -1.753e-03) * s0_0_2;
	r7 += V4(2.870e-02, 5.053e-02, 1.002e-01, 8.230e-01) * s0_0_2;
	r0 += V4(-7.436e-02, 5.684e-01, 2.321e-01, -3.811e-01) * s0_1_0;
	r1 += V4(-1.051e-01, 1.839e-02, 1.323e-02, -1.233e-01) * s0_1_0;
	r2 += V4(-1.546e-01, -6.340e-01, -2.979e-01, 1.332e-03) * s0_1_0;
	r3 += V4(3.410e-01, 1.411e-01, 1.589e-03, 2.217e-01) * s0_1_0;
	r4 += V4(-8.839e-03, -5.350e-01, 2.360e-02, -3.542e-02) * s0_1_0;
	r5 += V4(1.337e-01, -6.803e-02, -2.114e-01, -4.069e-02) * s0_1_0;
	r6 += V4(-6.685e-02, -1.592e-01, -3.852e-02, 2.213e-05) * s0_1_0;
	r7 += V4(-3.992e-02, -2.378e-01, -6.008e-02, 3.774e-03) * s0_1_0;
	r0 += V4(5.629e-01, -4.984e-01, 1.160e-02, 3.410e-01) * s0_1_1;
	r1 += V4(-1.492e-01, 1.054e-01, 4.125e-02, -1.323e-01) * s0_1_1;
	r2 += V4(1.265e-01, -4.492e-03, 1.428e-02, 3.554e-02) * s0_1_1;
	r3 += V4(-2.519e-01, -6.911e-01, -2.532e-02, -3.416e-01) * s0_1_1;
	r4 += V4(-2.109e-02, 3.012e-03, -3.139e-01, -2.622e-01) * s0_1_1;
	r5 += V4(-3.143e-01, -4.829e-01, -4.446e-01, -4.836e-01) * s0_1_1;
	r6 += V4(-3.752e-01, -5.236e-02, -3.135e-01, -6.081e-01) * s0_1_1;
	r7 += V4(-5.645e-01, -1.540e-01, -4.984e-01, -2.441e-02) * s0_1_1;
	r0 += V4(2.529e-02, -2.620e-02, -2.914e-02, 8.133e-02) * s0_1_2;
	r1 += V4(-9.575e-02, -1.335e-01, -4.596e-01, 1.834e-02) * s0_1_2;
	r2 += V4(-3.365e-02, 5.157e-04, 2.141e-01, -1.065e-02) * s0_1_2;
	r3 += V4(-2.803e-01, 2.443e-02, -6.270e-01, -2.510e-01) * s0_1_2;
	r4 += V4(4.132e-01, 5.371e-01, 2.948e-01, 3.096e-01) * s0_1_2;
	r5 += V4(8.326e-02, -2.241e-02, -3.456e-02, 4.101e-02) * s0_1_2;
	r6 += V4(3.293e-02, 1.698e-02, 4.429e-02, 9.248e-03) * s0_1_2;
	r7 += V4(6.094e-01, 3.207e-01, 2.369e-01, 9.970e-03) * s0_1_2;
	r0 += V4(4.595e-02, 5.593e-03, -2.313e-02, -1.014e-01) * s0_2_0;
	r1 += V4(-2.007e-03, -2.151e-02, 1.764e-03, -9.357e-02) * s0_2_0;
	r2 += V4(-3.706e+00, 1.733e-03, -1.197e-01, -7.738e-02) * s0_2_0;
	r3 += V4(3.714e-01, 1.317e-01, -2.187e-03, 2.357e-01) * s0_2_0;
	r4 += V4(-5.179e-03, -2.104e-02, 9.146e-03, -1.751e-01) * s0_2_0;
	r5 += V4(-6.623e-02, 1.710e-02, 2.899e-03, -2.145e-01) * s0_2_0;
	r6 += V4(1.692e-02, -9.349e-03, -1.352e-02, 3.755e-04) * s0_2_0;
	r7 += V4(3.703e-02, 3.641e-01, 4.461e-02, 9.491e-04) * s0_2_0;
	r0 += V4(-5.098e-01, -3.918e-02, 1.220e-03, -3.820e-02) * s0_2_1;
	r1 += V4(-3.258e-03, -7.447e-02, -9.691e-03, -3.997e-02) * s0_2_1;
	r2 += V4(2.901e-02, -5.108e-03, -2.689e-01, -4.385e-01) * s0_2_1;
	r3 += V4(-6.423e-02, 1.111e-01, 2.720e-02, 1.287e-01) * s0_2_1;
	r4 += V4(-6.119e-02, 2.474e-02, -2.313e-02, 5.449e-01) * s0_2_1;
	r5 += V4(1.179e-01, 5.605e-01, -1.161e-02, 3.320e-01) * s0_2_1;
	r6 += V4(5.127e-02, 8.007e-02, 1.238e-01, -8.312e-03) * s0_2_1;
	r7 += V4(-4.132e-02, -3.076e-01, 1.605e-01, -3.267e-04) * s0_2_1;
	r0 += V4(9.292e-03, -3.040e-04, 1.363e-02, 1.100e-01) * s0_2_2;
	r1 += V4(-3.771e-03, -3.803e-01, 5.290e-03, 1.929e-01) * s0_2_2;
	r2 += V4(7.011e-02, 2.123e-03, -3.299e-02, -4.746e-02) * s0_2_2;
	r3 += V4(-1.085e-01, 1.976e-02, 6.303e-01, 4.763e-02) * s0_2_2;
	r4 += V4(-3.083e-01, -9.208e-03, 1.163e-02, -3.784e-01) * s0_2_2;
	r5 += V4(-5.616e-02, 8.636e-04, 4.686e-03, 1.305e-01) * s0_2_2;
	r6 += V4(3.304e-01, 4.370e-01, 2.512e-01, 6.106e-01) * s0_2_2;
	r7 += V4(7.945e-03, -6.946e-02, 1.204e-01, -1.154e-02) * s0_2_2;
	r0 += V4(7.267e-03, 1.350e-02, -1.227e-01, -3.158e-03);
	r0 = clamp(r0, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), vec4(r0));
	r1 += V4(1.212e-02, 8.083e-03, -9.242e-03, 6.418e-03);
	r1 = clamp(r1, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), vec4(r1));
	r2 += V4(3.675e-02, 2.454e-05, 8.853e-03, -7.821e-03);
	r2 = clamp(r2, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), vec4(r2));
	r3 += V4(-2.968e-03, 2.373e-03, 4.447e-04, 9.035e-03);
	r3 = clamp(r3, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), vec4(r3));
	r4 += V4(-2.159e-02, 6.508e-05, 5.349e-03, -4.646e-03);
	r4 = clamp(r4, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), vec4(r4));
	r5 += V4(1.074e-01, 1.351e-02, 1.094e-02, -1.068e-02);
	r5 = clamp(r5, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(3, 0), vec4(r5));
	r6 += V4(2.702e-02, 1.939e-03, 5.153e-03, 1.159e-05);
	r6 = clamp(r6, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), vec4(r6));
	r7 += V4(1.770e-02, -1.734e-02, -1.911e-02, -7.740e-01);
	r7 = clamp(r7, V4(0.0), V4(1.0));
	imageStore(out_image, opos + ivec2(3, 1), vec4(r7));
}

//!DESC [CuNNy_4x32_DS_vk] -conv1
//!HOOK LUMA
//!COMPUTE 32 16 8 8
//!BIND in
//!BIND LUMA
//!SAVE conv1
//!WIDTH LUMA.w 4 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[8][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(4, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec2 p;
			vec4 r, g, b, a;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(1, 1)) * in_pt;
			r = in_gather(p, 0);
			g = in_gather(p, 1);
			b = in_gather(p, 2);
			a = in_gather(p, 3);
			vec4 v0 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v1 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v2 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v3 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(3, 1)) * in_pt;
			r = in_gather(p, 0);
			g = in_gather(p, 1);
			b = in_gather(p, 2);
			a = in_gather(p, 3);
			vec4 v4 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v5 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v6 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v7 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
			G[6][ay][ax] = int(packSnorm4x8(v6));
			G[7][ay][ax] = int(packSnorm4x8(v7));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5, r6, r7;
	vec4 f0, f1, f2, f3, f4, f5, f6, f7;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0); r6 = ivec4(0); r7 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xEAFC191C, 0x0204FCF1, 0x050FFA1D, 0xF5F8EFE9);
	r1 = D(r1, s0_0_0, 0xC3EA07BC, 0x00F2F410, 0xF6FFF5FA, 0xE21827E9);
	r2 = D(r2, s0_0_0, 0x01FDF5FC, 0xF4CA06EE, 0xEBF80D0B, 0x340125A0);
	r3 = D(r3, s0_0_0, 0x01262A07, 0x0008F8DC, 0x0A03F2EF, 0x090AFA07);
	r4 = D(r4, s0_0_0, 0x0C05EE05, 0xECF4FBDC, 0xE7090C07, 0x1F11F9D4);
	r5 = D(r5, s0_0_0, 0x0C07FD09, 0x05DFFFEB, 0xE9FBD9E6, 0x03FAFE02);
	r6 = D(r6, s0_0_0, 0x1AE9FE0C, 0x1001F2F3, 0xF9EA01F6, 0x0805F4F7);
	r7 = D(r7, s0_0_0, 0x13F8FBD3, 0x0F021B6A, 0x17FF16EA, 0x03FCF8C2);
	r0 = D(r0, s0_0_1, 0xF3030DD4, 0x02F80614, 0x110EF305, 0xEF1424F7);
	r1 = D(r1, s0_0_1, 0xE097E61A, 0x0201ECDE, 0x25F740E7, 0xCC1D22E1);
	r2 = D(r2, s0_0_1, 0x15F6EFF9, 0x0DEA13E5, 0x0301FA14, 0x19D1EF0F);
	r3 = D(r3, s0_0_1, 0x16FA310A, 0x11F3012F, 0x0EEBF700, 0xF8FEFDF8);
	r4 = D(r4, s0_0_1, 0x05F1EC29, 0xFF0A0F23, 0xF91205FD, 0x0B0EFC02);
	r5 = D(r5, s0_0_1, 0x07FB1212, 0x00F8E00B, 0xEC3D2AFA, 0x01FCF3AE);
	r6 = D(r6, s0_0_1, 0x0DF9D7E8, 0x13F333EE, 0xEF06363D, 0x0BF41440);
	r7 = D(r7, s0_0_1, 0x1C0A0F07, 0x10040AD2, 0xF0FA042C, 0xFAE8FF0E);
	r0 = D(r0, s0_0_2, 0x03F4D7ED, 0x0C090606, 0xE7F3F101, 0x13201C14);
	r1 = D(r1, s0_0_2, 0x8181B62A, 0xF3FD1409, 0x0E05EB13, 0x21EE2A06);
	r2 = D(r2, s0_0_2, 0xF71BF808, 0x12F1E0FF, 0xF3CFEDE9, 0x1B490227);
	r3 = D(r3, s0_0_2, 0x1EFC0CFE, 0x04F202EB, 0xFA18F908, 0x0FF903CC);
	r4 = D(r4, s0_0_2, 0x21FF0101, 0x1D0535F7, 0xFAF2DD09, 0x32E200DC);
	r5 = D(r5, s0_0_2, 0x160416D4, 0x0404FAE2, 0x10FB111A, 0xF7F4D602);
	r6 = D(r6, s0_0_2, 0xD935D425, 0x1EFA09F5, 0xD90906EF, 0x0BFAE8ED);
	r7 = D(r7, s0_0_2, 0xF1FE0EDF, 0x07030F18, 0xE801040B, 0xFB092904);
	r0 = D(r0, s0_1_0, 0xE9F40A05, 0x07FC0301, 0x01D4DB00, 0x0CFFE0FA);
	r1 = D(r1, s0_1_0, 0xBF1911F0, 0x23FF1E34, 0xF1D7FD06, 0xD6E7E414);
	r2 = D(r2, s0_1_0, 0x08142248, 0x1F1A04FC, 0xD9F120FA, 0x06DA02FD);
	r3 = D(r3, s0_1_0, 0x05D63AC5, 0x05F9FBE5, 0xFF06EFF4, 0x0BF41EEF);
	r4 = D(r4, s0_1_0, 0x120AEE19, 0xD209A4E0, 0xFAEDDEF0, 0x191215EB);
	r5 = D(r5, s0_1_0, 0x0C0BFAFA, 0xF7171610, 0xF1F5F518, 0x0D0407F9);
	r6 = D(r6, s0_1_0, 0xF906E108, 0x28051D07, 0xF00B2117, 0x0402FD01);
	r7 = D(r7, s0_1_0, 0x1709060A, 0x1A1E0119, 0x06FAFCDE, 0x1811FEF6);
	r0 = D(r0, s0_1_1, 0xC7E9B5CE, 0x1309E7FE, 0xF2F5C934, 0xF71502EA);
	r1 = D(r1, s0_1_1, 0xF3DE343E, 0xE4F5FEE0, 0x1B0BB607, 0xECCF9133);
	r2 = D(r2, s0_1_1, 0xF0F97FD8, 0x1EB5CF85, 0xD723D5DE, 0x1EED8121);
	r3 = D(r3, s0_1_1, 0x0A0BBC41, 0x1513015D, 0x03F6DCF9, 0xFC062935);
	r4 = D(r4, s0_1_1, 0x0AFAFED1, 0xD7F0ABEB, 0xF5FBF9FE, 0xEAE0050B);
	r5 = D(r5, s0_1_1, 0xEAFC0D23, 0x090D4DFF, 0xE90C3436, 0xF8FDE229);
	r6 = D(r6, s0_1_1, 0xCCF0FDE1, 0xE516D516, 0xC502281F, 0x0E034CEC);
	r7 = D(r7, s0_1_1, 0xFA03DBFB, 0xE5EB18DF, 0xCFF3E119, 0xF803FCD8);
	r0 = D(r0, s0_1_2, 0x2D2BBD29, 0x01E5FF06, 0xEC01B1F6, 0x1AEF0E18);
	r1 = D(r1, s0_1_2, 0xF5815DFE, 0x1741D4FA, 0x2446141B, 0xEA04E5F2);
	r2 = D(r2, s0_1_2, 0x07EB1EFC, 0xF1078128, 0x1C26D7F8, 0xEF36F606);
	r3 = D(r3, s0_1_2, 0xFE2913F3, 0xDF210FED, 0x0F362305, 0xEE1F0707);
	r4 = D(r4, s0_1_2, 0xE523F503, 0x0318953B, 0xF0C129F0, 0xBD0288F7);
	r5 = D(r5, s0_1_2, 0xF3F9951E, 0x20B5111C, 0xFCE00E04, 0x122621E8);
	r6 = D(r6, s0_1_2, 0x16EAE508, 0xE7F41205, 0x0DEF2AE1, 0xFFF90008);
	r7 = D(r7, s0_1_2, 0xF2EC0213, 0x29152DF9, 0xFE15F711, 0x14033AA0);
	r0 = D(r0, s0_2_0, 0x06160D0A, 0x01020400, 0x290A12BE, 0x01E7D7F2);
	r1 = D(r1, s0_2_0, 0xDF1EF5E1, 0xFA000809, 0x00F503F6, 0x421DFAF6);
	r2 = D(r2, s0_2_0, 0x06FFEBF8, 0xFBE0FCF4, 0xED030F03, 0x00E24609);
	r3 = D(r3, s0_2_0, 0xF8E1E3DA, 0x05F9F9E8, 0xFFF50711, 0xDF10F305);
	r4 = D(r4, s0_2_0, 0x06090EF3, 0xFE0C1FF5, 0x0D0A0920, 0x13100D1D);
	r5 = D(r5, s0_2_0, 0x0B09F71C, 0xE9FA1515, 0x0F06ED26, 0x07F90113);
	r6 = D(r6, s0_2_0, 0x29F20D0B, 0x01080A05, 0xF6FAF00D, 0x06010007);
	r7 = D(r7, s0_2_0, 0x11FBEB09, 0xFCF6EC06, 0x371F0DC8, 0x10F4DDE8);
	r0 = D(r0, s0_2_1, 0x0CF804FF, 0x070005FC, 0x14F8221D, 0x13F42B03);
	r1 = D(r1, s0_2_1, 0x0848E8B1, 0x0AF0FD0F, 0xCEF1FD0D, 0x160F1506);
	r2 = D(r2, s0_2_1, 0xEBF806ED, 0x1AD6021D, 0x262E1CFC, 0xB0E0EFFF);
	r3 = D(r3, s0_2_1, 0xF1F5DC22, 0x050702F4, 0xE2F0EEFD, 0xF6EFE5FC);
	r4 = D(r4, s0_2_1, 0xF1F72B1A, 0x03E319F6, 0xEA22FF01, 0xF108FF46);
	r5 = D(r5, s0_2_1, 0xE208DCFA, 0x0116FA0C, 0x10D3D4FB, 0xF60AF80B);
	r6 = D(r6, s0_2_1, 0x13172215, 0xFB060508, 0x00220610, 0xFAFC0B03);
	r7 = D(r7, s0_2_1, 0x2514F21C, 0xD8E8EEF6, 0x19F61427, 0x07F6EDFE);
	r0 = D(r0, s0_2_2, 0xE5009A06, 0x06090604, 0x1D19071E, 0xFFE403DA);
	r1 = D(r1, s0_2_2, 0x211F09F5, 0xFA03E8D5, 0xEFF0F9FF, 0x0BEFD10B);
	r2 = D(r2, s0_2_2, 0xF50AEC07, 0x0BA9E309, 0xF6CFFAFC, 0x242E1AE6);
	r3 = D(r3, s0_2_2, 0xFE02EB08, 0x05F1EFF4, 0xFE0C0802, 0x0BEBEB01);
	r4 = D(r4, s0_2_2, 0x16FAF304, 0x2513FAEF, 0xF2100CF7, 0x0A0CD5F3);
	r5 = D(r5, s0_2_2, 0x15FBD3C5, 0x2C3E3006, 0xEA18DCF2, 0x0AF4FBF4);
	r6 = D(r6, s0_2_2, 0x13FE0FFD, 0xEAF305F4, 0xFAECFBD5, 0x01060203);
	r7 = D(r7, s0_2_2, 0xED0AE919, 0xF5F699C5, 0xE3F6F0EC, 0xE3FEF509);
	r0 = D(r0, s1_0_0, 0x28EEF81F, 0xF603ED06, 0xFDFF0AEE, 0x231DE90C);
	r1 = D(r1, s1_0_0, 0x001A12F6, 0xBEE7E9FA, 0x1C098104, 0x2AE61711);
	r2 = D(r2, s1_0_0, 0xE80AE308, 0x2A13E808, 0xFB360CED, 0xDDECD203);
	r3 = D(r3, s1_0_0, 0x11030E14, 0x010CFBFB, 0x01EB0CFE, 0xE91BF0F2);
	r4 = D(r4, s1_0_0, 0xF608F3FA, 0xFAF017D7, 0x0B0CE9F9, 0xDAEAF301);
	r5 = D(r5, s1_0_0, 0x040BE921, 0xD5081DF2, 0x1EFE1618, 0x0F1AEB15);
	r6 = D(r6, s1_0_0, 0xE85F2BEF, 0xE6D90E09, 0xE5BD21F1, 0x06FA03FC);
	r7 = D(r7, s1_0_0, 0xEA03F805, 0xF102E00F, 0xD1F90B0A, 0xE212FAD3);
	r0 = D(r0, s1_0_1, 0xECE60E0C, 0x0607FFF4, 0xF8FFF20B, 0xFE13EFFC);
	r1 = D(r1, s1_0_1, 0xEA33CBF9, 0x3B0D12E6, 0xEA0BF9ED, 0x0B19FEFC);
	r2 = D(r2, s1_0_1, 0x0402FAF8, 0xF4EAFFF5, 0x001611F1, 0xFA23E7F3);
	r3 = D(r3, s1_0_1, 0x0601FF18, 0xF60802FD, 0x10040C04, 0xF70BF9FD);
	r4 = D(r4, s1_0_1, 0x041CE205, 0x1000DDD4, 0x11F8F9F0, 0x083CEADB);
	r5 = D(r5, s1_0_1, 0xFAEBFF12, 0xEEF7F20B, 0x0201FB1B, 0x10FFE70C);
	r6 = D(r6, s1_0_1, 0x0ADC03FD, 0xF40AE900, 0x42D02829, 0x05FF0010);
	r7 = D(r7, s1_0_1, 0x0709E3FF, 0xF5D8152A, 0x25DF290E, 0x07F607F1);
	r0 = D(r0, s1_0_2, 0xEBEFFA09, 0x00020504, 0x220D00C1, 0xEB09EF1E);
	r1 = D(r1, s1_0_2, 0x81EED6F5, 0x28F706FB, 0x01071AFB, 0xF4F6FD1E);
	r2 = D(r2, s1_0_2, 0x070502F8, 0xF704150F, 0x05FD00E2, 0x0C0104DC);
	r3 = D(r3, s1_0_2, 0x0503FB00, 0x08FAFF09, 0xFC040FFD, 0xF501F70C);
	r4 = D(r4, s1_0_2, 0xFB0E0CE6, 0xDB14370F, 0x03F3E222, 0xFCF6EA0F);
	r5 = D(r5, s1_0_2, 0x1DF518FE, 0xF422FC0A, 0x02F40209, 0x05FEFEFC);
	r6 = D(r6, s1_0_2, 0x2E0AE514, 0x0FF902EA, 0xFE0510FB, 0xF9FE0BFD);
	r7 = D(r7, s1_0_2, 0x1FE31E0E, 0x03F60811, 0xFA26D6D2, 0xF512F7F0);
	r0 = D(r0, s1_1_0, 0xE74ACA04, 0xFD04F809, 0x0FF405F3, 0xEE091D0F);
	r1 = D(r1, s1_1_0, 0x42020817, 0x11F03A29, 0x0081B6FE, 0x0DE8E1F9);
	r2 = D(r2, s1_1_0, 0x1DF11219, 0xCB1903FD, 0x14F5050E, 0xE6D381FB);
	r3 = D(r3, s1_1_0, 0xE63B35E9, 0xF7F83B08, 0x08DEF4FC, 0x03D92601);
	r4 = D(r4, s1_1_0, 0xF13505F2, 0x20EB1740, 0xD48D280E, 0xC3C220D8);
	r5 = D(r5, s1_1_0, 0xEB1D53FF, 0x0AE90610, 0x16C72904, 0xFE34EB13);
	r6 = D(r6, s1_1_0, 0x0FFDED23, 0xF9ECFA0A, 0xEFD6381F, 0x020C0501);
	r7 = D(r7, s1_1_0, 0xE51EC000, 0x061CE804, 0xF7E72EEE, 0x06F00904);
	r0 = D(r0, s1_1_1, 0x1E05A8E9, 0x06F2F0E8, 0xD4221010, 0x17FCFE40);
	r1 = D(r1, s1_1_1, 0x6B251C11, 0xF2DDF1F6, 0x0A220E26, 0xFBEDDCE8);
	r2 = D(r2, s1_1_1, 0xF0FB0FE5, 0x05F8261B, 0x01FEF9D3, 0x063E0524);
	r3 = D(r3, s1_1_1, 0xE9071D09, 0xF0F7F9F8, 0xF0C83FEB, 0x13FDF3E1);
	r4 = D(r4, s1_1_1, 0x00CD1D30, 0xF1ECEAE0, 0x010B1A10, 0x17F711CA);
	r5 = D(r5, s1_1_1, 0x0013EB0A, 0xF70C16FE, 0xDF070418, 0xEC1BD8C0);
	r6 = D(r6, s1_1_1, 0xE705F6E1, 0x04FF0A11, 0x14391FDD, 0xFA0D040D);
	r7 = D(r7, s1_1_1, 0xFE09E9F7, 0x0621043E, 0x08F0460E, 0xE2FD1BBA);
	r0 = D(r0, s1_1_2, 0x113DC70E, 0xFEF90812, 0xE2CB053B, 0xF525F9F0);
	r1 = D(r1, s1_1_2, 0xBAE3DFA7, 0x090909F6, 0x11CFFAFF, 0x131203DD);
	r2 = D(r2, s1_1_2, 0xFEFF05FF, 0x1B08F301, 0x09170BF6, 0x08EB0F04);
	r3 = D(r3, s1_1_2, 0xF616E9CA, 0x1506F50B, 0xDEFB01F6, 0xD104FE0A);
	r4 = D(r4, s1_1_2, 0xF4DD3609, 0xFAECFDFD, 0x25191102, 0x24ED12FB);
	r5 = D(r5, s1_1_2, 0x2A3909EF, 0xFDEFE432, 0xE904FA01, 0x09F10DEE);
	r6 = D(r6, s1_1_2, 0x03FCFC37, 0xFD0500F5, 0xD8EF0820, 0x01F8FAFD);
	r7 = D(r7, s1_1_2, 0x15F80120, 0xFFF8FAC6, 0xE5EFEB05, 0x0D07E4F7);
	r0 = D(r0, s1_2_0, 0xF13BD2E0, 0x0009F8FA, 0xE716FCDB, 0xEBDEF823);
	r1 = D(r1, s1_2_0, 0x001C370D, 0x12F2280D, 0xF6F30307, 0xF33313CB);
	r2 = D(r2, s1_2_0, 0xF605120A, 0xF0150210, 0xF9F73602, 0x13D9FE01);
	r3 = D(r3, s1_2_0, 0x113F0611, 0xF6E302F9, 0x0710E310, 0x0DE30305);
	r4 = D(r4, s1_2_0, 0x081BFFFC, 0xFDE8F11F, 0xEEF720E3, 0x0841B2D4);
	r5 = D(r5, s1_2_0, 0xF4171905, 0x17F1BF19, 0x0CFB19E3, 0xF502FE05);
	r6 = D(r6, s1_2_0, 0xDFF0F7EC, 0xEF58FAEF, 0xD3081718, 0x000FFBFA);
	r7 = D(r7, s1_2_0, 0x18FDEFBB, 0xF7D6EFFC, 0xEB0DFBF9, 0x08FE0EDF);
	r0 = D(r0, s1_2_1, 0xF27FA41B, 0x011108FE, 0x1915EDD8, 0x09DA1EF9);
	r1 = D(r1, s1_2_1, 0xC4050DD5, 0xC1FDED39, 0x16FCDB24, 0xB6FDE51B);
	r2 = D(r2, s1_2_1, 0x10EAEFE6, 0xD181D981, 0xE803FAB6, 0x2D513A2A);
	r3 = D(r3, s1_2_1, 0x146417FC, 0x1E0A2225, 0x0005E407, 0x0E1B1518);
	r4 = D(r4, s1_2_1, 0x00AF32F3, 0xF5FC0A15, 0xF3E92BF8, 0xDED7CF3B);
	r5 = D(r5, s1_2_1, 0xD9E224F7, 0xF8DE4CA4, 0xD2FD1A08, 0xFA041246);
	r6 = D(r6, s1_2_1, 0x0EF3F9DA, 0x1A121D10, 0x0BD51DBF, 0xF6ED03DD);
	r7 = D(r7, s1_2_1, 0xCA3FDFC8, 0xFFE3E3FD, 0x0FF8B6F1, 0x181CE7D5);
	r0 = D(r0, s1_2_2, 0xF933F5E0, 0xFCFBFD0A, 0x0817FA26, 0xF71ADCF2);
	r1 = D(r1, s1_2_2, 0xFA0CE00B, 0xFFEBFBF1, 0x04F8F1EB, 0xF60110E5);
	r2 = D(r2, s1_2_2, 0x090305F9, 0xFFDA0401, 0xFB19DF26, 0xF3F40FED);
	r3 = D(r3, s1_2_2, 0xFD3AF2FD, 0x0A0BFFF1, 0xF8F3060F, 0xF9FDFE0F);
	r4 = D(r4, s1_2_2, 0x100F0806, 0xE5250103, 0xFC040AEC, 0x10D62012);
	r5 = D(r5, s1_2_2, 0x0B2909E7, 0xEA33D648, 0xF307FBDE, 0x000808D6);
	r6 = D(r6, s1_2_2, 0xF70DF503, 0x0D0A0EEC, 0x0D31D6F7, 0xFEFFFF0F);
	r7 = D(r7, s1_2_2, 0x0F070515, 0x270B01CD, 0x2F1DEC2C, 0xE10806FE);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xE400EBF6, 0x05000100, 0xF00D0307, 0x0AFBF401);
	r1 = D(r1, s0_0_0, 0xF5F8FAD2, 0xE811FE03, 0x29E511F6, 0xCA1BDB1E);
	r2 = D(r2, s0_0_0, 0x03F602F9, 0x00FBF920, 0xE51EEE14, 0xE0FD0707);
	r3 = D(r3, s0_0_0, 0xDFF0FA38, 0x0AFFFEF7, 0xF3FD09F8, 0x1B020AF3);
	r4 = D(r4, s0_0_0, 0x07E417F6, 0xED0B001D, 0xFA0CF209, 0x140C0211);
	r5 = D(r5, s0_0_0, 0xF4E607E9, 0xE70C0709, 0x81EB0FF5, 0xEE05F7F9);
	r6 = D(r6, s0_0_0, 0xD811FE00, 0x0BFD000D, 0xE1FA0B12, 0xFBF807FD);
	r7 = D(r7, s0_0_0, 0x13020103, 0x000005F4, 0xF80101E7, 0x13031401);
	r0 = D(r0, s0_0_1, 0x29D7F717, 0x11F70705, 0xEBF8FE0A, 0x20F70491);
	r1 = D(r1, s0_0_1, 0x4F0C1430, 0xD81314F9, 0xA919F4EB, 0x00E4F639);
	r2 = D(r2, s0_0_1, 0x2CFEEF14, 0x0703091D, 0x0B24E70D, 0x1B08E9D4);
	r3 = D(r3, s0_0_1, 0x14E0FAD7, 0xE2130709, 0xDB09FEF2, 0x28EA10F9);
	r4 = D(r4, s0_0_1, 0xFC0AFB07, 0xD7F511F4, 0x0C0E10FD, 0xFA0702C8);
	r5 = D(r5, s0_0_1, 0xF50ED805, 0xE91EF5FF, 0x01E7FA10, 0x3AEBFA0C);
	r6 = D(r6, s0_0_1, 0xD732F411, 0xF710DCD0, 0xCA1ADF04, 0x0108FBE5);
	r7 = D(r7, s0_0_1, 0xDE18F920, 0x140FE914, 0xA5F30CF1, 0xF6010AEB);
	r0 = D(r0, s0_0_2, 0x11F5F3EB, 0xFF0903EE, 0xD638EBF0, 0x09FFF829);
	r1 = D(r1, s0_0_2, 0x0ED17F81, 0x22FD07E0, 0xF118FB02, 0x25D605CE);
	r2 = D(r2, s0_0_2, 0xFE00F8FB, 0xEE08EF7F, 0x000EF800, 0x2BE42981);
	r3 = D(r3, s0_0_2, 0x2CEAFBFF, 0x05FE00F6, 0x00EE0CFA, 0x11F51602);
	r4 = D(r4, s0_0_2, 0x14F412F3, 0x4ACB02C8, 0xF915FE98, 0x120B2736);
	r5 = D(r5, s0_0_2, 0x1C0ADA28, 0xBB45E09A, 0x36DA2AE5, 0x21FCF615);
	r6 = D(r6, s0_0_2, 0xED350406, 0x03F31AE5, 0xF7E5DAE2, 0xFDFD0A0D);
	r7 = D(r7, s0_0_2, 0x05F8F01D, 0xC219FB01, 0x22D81E57, 0x00FE09F7);
	r0 = D(r0, s0_1_0, 0x2610F001, 0xFD02FF02, 0x04041507, 0xEBE0FEFA);
	r1 = D(r1, s0_1_0, 0xD7E009C4, 0x07FF0716, 0x29F9F90B, 0x1813E3E2);
	r2 = D(r2, s0_1_0, 0x00EAF600, 0x0FFE17F0, 0xF112F312, 0xF94CF60E);
	r3 = D(r3, s0_1_0, 0xC8FE05F9, 0xFC07FB00, 0x06F706FE, 0xE7FE03FB);
	r4 = D(r4, s0_1_0, 0x10F513FE, 0xEA2EF200, 0xEBFD1124, 0x0B0C13EB);
	r5 = D(r5, s0_1_0, 0xF00507F2, 0x0209F61A, 0xA0C4E52B, 0xF9FD0001);
	r6 = D(r6, s0_1_0, 0xC548FA03, 0x12DE140E, 0xF20EE404, 0x08FBFEFE);
	r7 = D(r7, s0_1_0, 0x2402020C, 0x280E03E9, 0xFAF80FF0, 0x1FE41217);
	r0 = D(r0, s0_1_1, 0x15FB2A06, 0x0907EC08, 0xDF2AFCD1, 0xF9FF9FC3);
	r1 = D(r1, s0_1_1, 0xAEE9E70E, 0xB509D0FA, 0xE1080518, 0xEAF24C10);
	r2 = D(r2, s0_1_1, 0xEAF11CDF, 0xE5EB1B41, 0x0CD21404, 0x31E0CE13);
	r3 = D(r3, s0_1_1, 0xD5D6D1BB, 0xE71DF305, 0xFEFA09F8, 0xFEFCFD13);
	r4 = D(r4, s0_1_1, 0xEA1D05EC, 0x12DE350F, 0xF6EEF31A, 0xDA0D1100);
	r5 = D(r5, s0_1_1, 0xC2FD0911, 0x1EE6021B, 0x0ADEF9D6, 0x30DA1D18);
	r6 = D(r6, s0_1_1, 0x3E19040F, 0x08B08114, 0xB00D1D11, 0x03F52C02);
	r7 = D(r7, s0_1_1, 0x03D8F625, 0xCC24FAF9, 0x81210007, 0xE21EFCF3);
	r0 = D(r0, s0_1_2, 0xFB43F7F0, 0xE90C2602, 0xC1F2F22A, 0x050F19E9);
	r1 = D(r1, s0_1_2, 0xCCE181E2, 0x1D02DBEB, 0x04082181, 0x1BF2C637);
	r2 = D(r2, s0_1_2, 0xFE00111A, 0xE51DBE08, 0x24F8D31D, 0xE602260F);
	r3 = D(r3, s0_1_2, 0x19FE1707, 0xF00ADA1A, 0xEB0D20DD, 0xF00A161E);
	r4 = D(r4, s0_1_2, 0x913F1210, 0x17F5F1E7, 0xFBE82822, 0x000A37E5);
	r5 = D(r5, s0_1_2, 0xBC4C81F3, 0xE80F31CF, 0x06F1D822, 0x1EE596FB);
	r6 = D(r6, s0_1_2, 0x16E2CA0C, 0x020F810C, 0xFCED0AEB, 0xFA080104);
	r7 = D(r7, s0_1_2, 0xF3091FF8, 0x14FF1817, 0xEA0248ED, 0x13FE0700);
	r0 = D(r0, s0_2_0, 0x0DF312FA, 0x08FA01FE, 0x020C150E, 0x17DAF5FE);
	r1 = D(r1, s0_2_0, 0xEE0A1732, 0xFC07F2FF, 0xF51BFDF1, 0x35CC3600);
	r2 = D(r2, s0_2_0, 0x19F71204, 0xF509F9F4, 0xDCF4E209, 0xD939F41B);
	r3 = D(r3, s0_2_0, 0x16D9D307, 0x04020400, 0xFB0CF801, 0xEA1DFA01);
	r4 = D(r4, s0_2_0, 0x091B05FE, 0xF6260C0A, 0xF2FB13F6, 0x10161DE5);
	r5 = D(r5, s0_2_0, 0x01FB06EE, 0x18FEEDF9, 0xAA48FFFB, 0xEB12F3FD);
	r6 = D(r6, s0_2_0, 0xF8F60EFC, 0x0B05F7E5, 0xFAEC0B0A, 0x07FA09FB);
	r7 = D(r7, s0_2_0, 0x13FA15EE, 0xFA1EF903, 0x181D0A05, 0x14ED2106);
	r0 = D(r0, s0_2_1, 0x1FF7F41B, 0x03000D00, 0xD83BFAF6, 0xF81002E8);
	r1 = D(r1, s0_2_1, 0xE6212902, 0xD20781EC, 0xEF05FA03, 0x00EBE729);
	r2 = D(r2, s0_2_1, 0x0EF0E601, 0xB30D810E, 0x2708FE0E, 0xE91681AB);
	r3 = D(r3, s0_2_1, 0x1EEB81EA, 0x0523E408, 0x2AE410FE, 0xFEF7F30E);
	r4 = D(r4, s0_2_1, 0xB539F802, 0x03F602FC, 0x11EC10F8, 0x22F6222E);
	r5 = D(r5, s0_2_1, 0xE501E500, 0xF3D73708, 0xF61A02E4, 0xE20EFE01);
	r6 = D(r6, s0_2_1, 0xFF00160E, 0x00EF8CE6, 0xDB08F104, 0xFA090202);
	r7 = D(r7, s0_2_1, 0x3CE0231A, 0xEDEBEAE7, 0xF1F3F4F7, 0x27D808F5);
	r0 = D(r0, s0_2_2, 0x5CEDA001, 0xFCFB05FB, 0xDF160007, 0xEC052000);
	r1 = D(r1, s0_2_2, 0xD3161D0A, 0x24EEFFF7, 0x3AD91C0C, 0xF61DEEDD);
	r2 = D(r2, s0_2_2, 0x0D00FEFA, 0xF7041E19, 0xE70431D6, 0xDF0C1C16);
	r3 = D(r3, s0_2_2, 0x0AF5111B, 0xEEF91908, 0x0106FEFD, 0xED0E040D);
	r4 = D(r4, s0_2_2, 0xC311F21B, 0x0F03BBE6, 0xF6FA04FE, 0x24F400F3);
	r5 = D(r5, s0_2_2, 0x17F7B40C, 0xD21E10E6, 0xE9F40724, 0xF007EE03);
	r6 = D(r6, s0_2_2, 0x0D042DF2, 0xEC051B15, 0x191BEE08, 0x04FBFE0A);
	r7 = D(r7, s0_2_2, 0xFFF9F104, 0x2FF1E6EC, 0xF42FBA28, 0x000C30FC);
	r0 = D(r0, s1_0_0, 0x0DDA12E8, 0x020CFE03, 0xDE7FEF30, 0x18030EF6);
	r1 = D(r1, s1_0_0, 0xB6BE092A, 0x0A81E2FF, 0x2DBC1EEE, 0xE60E2DDB);
	r2 = D(r2, s1_0_0, 0x140C00F0, 0xF9810D02, 0xD6A3EF22, 0x16E4E581);
	r3 = D(r3, s1_0_0, 0xF2FD27B6, 0x03F00211, 0x02EE020C, 0xF92CDFFE);
	r4 = D(r4, s1_0_0, 0x0202000D, 0xF02102DE, 0x030711F6, 0x0B34090A);
	r5 = D(r5, s1_0_0, 0x1ED9FCF4, 0xF846FC01, 0x1605E90B, 0xF9E8F405);
	r6 = D(r6, s1_0_0, 0x1181DD0E, 0x0DDEFEF4, 0x347408BC, 0x08F306F5);
	r7 = D(r7, s1_0_0, 0x11B8FBFA, 0x06FDFFF5, 0xD3F2E115, 0xFEECFE06);
	r0 = D(r0, s1_0_1, 0x1F12150F, 0x1E190BFA, 0xC2D6042C, 0xFFD112F2);
	r1 = D(r1, s1_0_1, 0xF6E05A94, 0xF00BC11B, 0xF73D080C, 0x1CEB1A2E);
	r2 = D(r2, s1_0_1, 0x0E060712, 0xFAF4EF05, 0xF2C9C81C, 0xEC218190);
	r3 = D(r3, s1_0_1, 0xEA2044D0, 0xEF02F801, 0x0F1C1AEE, 0x0F0C06DE);
	r4 = D(r4, s1_0_1, 0x052EFDEF, 0xE611F5D7, 0xF02BF30B, 0xED3C091D);
	r5 = D(r5, s1_0_1, 0x0481EBC5, 0xF100D109, 0xE0ECD8FE, 0x1AF6F4F8);
	r6 = D(r6, s1_0_1, 0x2681ECA8, 0xF91D02E4, 0xE63CEEED, 0x07FE04FE);
	r7 = D(r7, s1_0_1, 0x1EE31915, 0xEDF7E81B, 0xD902A12D, 0xEA21F90B);
	r0 = D(r0, s1_0_2, 0x1EF6F9F0, 0xF80002FF, 0xE0F6EA46, 0xE40FFC07);
	r1 = D(r1, s1_0_2, 0xF40CFCDD, 0xEDF1D913, 0xFC051112, 0xFD020F0A);
	r2 = D(r2, s1_0_2, 0xFB0B05FA, 0x29F7F8D1, 0xC3F5DE18, 0x11110708);
	r3 = D(r3, s1_0_2, 0x120EFAE4, 0x03060705, 0x190D06F0, 0x1C0D00EE);
	r4 = D(r4, s1_0_2, 0x1817FFF7, 0x16FDEE9C, 0xFEFF1E01, 0xF01813FF);
	r5 = D(r5, s1_0_2, 0xABE99A26, 0xDCFAEF1A, 0x220401F8, 0x03ECFE08);
	r6 = D(r6, s1_0_2, 0xCBF98112, 0xDC1EF716, 0x0E02F0E4, 0x0903FEFB);
	r7 = D(r7, s1_0_2, 0x0604E906, 0xD6F9FD17, 0x27FD0B06, 0x05EF05FA);
	r0 = D(r0, s1_1_0, 0xD512F1FC, 0xFD1108FD, 0xF368080D, 0x4A1A29E1);
	r1 = D(r1, s1_1_0, 0x8154E92E, 0x1800D9EE, 0x048709FA, 0x1A160DE4);
	r2 = D(r2, s1_1_0, 0x210801E0, 0x09E10207, 0xFC4DEDDC, 0x30CD3F81);
	r3 = D(r3, s1_1_0, 0xE7D92DCD, 0x0481FCFD, 0x05DC0C09, 0xF2B511F5);
	r4 = D(r4, s1_1_0, 0xFC1EFE12, 0xB1541C13, 0x3348EAE3, 0x07F2F1F5);
	r5 = D(r5, s1_1_0, 0xEB11FF14, 0xDF1E06E7, 0xFCB34DCF, 0xF3EFFC1A);
	r6 = D(r6, s1_1_0, 0xFA0DF80E, 0x67961EA8, 0xCA3DF615, 0x030F0507);
	r7 = D(r7, s1_1_0, 0xE106F01B, 0xFFD5FA17, 0xFEB21401, 0x3ACAEBF0);
	r0 = D(r0, s1_1_1, 0xECF4D6FF, 0xEC15F608, 0xD9110D03, 0x01BA0105);
	r1 = D(r1, s1_1_1, 0xF93AF509, 0x0F072723, 0xE722D809, 0xA710DE34);
	r2 = D(r2, s1_1_1, 0x07F9F01E, 0x07F17F06, 0x08D116E6, 0xCC26DCAF);
	r3 = D(r3, s1_1_1, 0xF134AFB1, 0xE0FE0CFB, 0x130C0601, 0xF1CDE5FC);
	r4 = D(r4, s1_1_1, 0x17D3DECE, 0x08F51FC8, 0xE04F97D3, 0xFC33CC05);
	r5 = D(r5, s1_1_1, 0xD6B315DC, 0x20C49EFC, 0xFADEF6F6, 0x0D08F0F0);
	r6 = D(r6, s1_1_1, 0xF214071D, 0x14FDF6C0, 0xF8C3D4FC, 0x0908DBFC);
	r7 = D(r7, s1_1_1, 0xEA0EFFF2, 0x120B11F9, 0xE3E30E00, 0x0B15FA13);
	r0 = D(r0, s1_1_2, 0xAAFF0C0B, 0xF603FB04, 0xDD0ABEF8, 0xF100E017);
	r1 = D(r1, s1_1_2, 0x111CF820, 0xFCFAD10B, 0xE619E624, 0xD9FBF10C);
	r2 = D(r2, s1_1_2, 0x02120DF1, 0xF6E4E013, 0x27F1F0D9, 0x030E1109);
	r3 = D(r3, s1_1_2, 0x01F816F0, 0xE1050D04, 0x0A0EF9EF, 0x06092609);
	r4 = D(r4, s1_1_2, 0xE91B81C2, 0x12FD98FC, 0x21FF49D8, 0x00FA0420);
	r5 = D(r5, s1_1_2, 0xAFEF81DD, 0xFEF903DA, 0x01163C00, 0x24EE09F1);
	r6 = D(r6, s1_1_2, 0x070CD001, 0xEE1B0A08, 0x35F111E4, 0x0300F002);
	r7 = D(r7, s1_1_2, 0xDF0E13E7, 0x0C03F111, 0xF0F6EF0A, 0xF7F70715);
	r0 = D(r0, s1_2_0, 0xF1F1060B, 0x070403FB, 0x58EB02C0, 0x19D914F1);
	r1 = D(r1, s1_2_0, 0xE901042B, 0xF30A030E, 0x09E8F704, 0x2734FAE3);
	r2 = D(r2, s1_2_0, 0x010C1208, 0x00F508FF, 0x153D23F0, 0x282F0AD2);
	r3 = D(r3, s1_2_0, 0xFBFD18EB, 0x03F9FD01, 0xE60C0616, 0xE71F0719);
	r4 = D(r4, s1_2_0, 0xFD12E208, 0x1017F9E2, 0xEC2C020F, 0x0BD9FDFF);
	r5 = D(r5, s1_2_0, 0xF514E819, 0x17D7D1FE, 0xC21D3C22, 0xED00F10F);
	r6 = D(r6, s1_2_0, 0x09FE08FD, 0xF5240C0C, 0xFC08160B, 0x0DF100FA);
	r7 = D(r7, s1_2_0, 0x25FCE703, 0x0D06EBFF, 0x06B0F1F6, 0x03000E0E);
	r0 = D(r0, s1_2_1, 0x0EE6270D, 0x090106F8, 0xFA3B13FF, 0xF7FBE50C);
	r1 = D(r1, s1_2_1, 0x04EEDE0B, 0xF2FF0708, 0x09EB04F6, 0x20E40CFA);
	r2 = D(r2, s1_2_1, 0xFC12F003, 0x01F704EB, 0x12BAEFF0, 0xC525F1FC);
	r3 = D(r3, s1_2_1, 0x04DAF6D5, 0xECF81E09, 0xFE22E104, 0xE3001614);
	r4 = D(r4, s1_2_1, 0xEB0ADF0A, 0xF91801EE, 0xFA2D1601, 0x1D06DCF0);
	r5 = D(r5, s1_2_1, 0xFF120712, 0x1CE008DE, 0xDD1DF214, 0xF510F70D);
	r6 = D(r6, s1_2_1, 0x070BFFF2, 0xF20EDE11, 0xF6CC2CFC, 0xF0FD0C08);
	r7 = D(r7, s1_2_1, 0x0B0AF614, 0xF920F50B, 0x17941A08, 0x05E6EE02);
	r0 = D(r0, s1_2_2, 0xEB01CB24, 0x00060000, 0xE90AD508, 0xF6D900FB);
	r1 = D(r1, s1_2_2, 0xE9F2BD15, 0xEFFFCE13, 0x110FFF0B, 0x16FEEEF1);
	r2 = D(r2, s1_2_2, 0x01020307, 0x1AF00DF1, 0xF4E7F602, 0xF00BFEFD);
	r3 = D(r3, s1_2_2, 0x18ECF4EF, 0x08FD0C02, 0xEF0C050F, 0x0BF904F3);
	r4 = D(r4, s1_2_2, 0x27F904E6, 0x00F1FEE5, 0x000507F5, 0x0D18F111);
	r5 = D(r5, s1_2_2, 0xFAFFDFF2, 0x09F015FF, 0xF50EFF0C, 0xFAFF01FD);
	r6 = D(r6, s1_2_2, 0xF1081308, 0x081306FA, 0xFEE017F5, 0xF909FD04);
	r7 = D(r7, s1_2_2, 0xF816F918, 0xF7F20B19, 0xE0E00715, 0xF1FF250E);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x18030D10, 0x03F702F7, 0x0E02EDE3, 0x07080D27);
	r1 = D(r1, s0_0_0, 0xF6BF127F, 0xEEF2FFE4, 0xF7E8EFC1, 0x10F20F4F);
	r2 = D(r2, s0_0_0, 0x150D083E, 0x19EEFB3C, 0x1808F3D4, 0xD0F800F1);
	r3 = D(r3, s0_0_0, 0x0900243F, 0xF5FDFD05, 0xFC0AFED5, 0xF705F8CA);
	r4 = D(r4, s0_0_0, 0xF70D04EA, 0xF6D2BB17, 0x06F3E625, 0x122A04FB);
	r5 = D(r5, s0_0_0, 0x1F0AFA24, 0x02E4F4AF, 0x1B0603A0, 0x1C0C04D7);
	r6 = D(r6, s0_0_0, 0xFDFCE4CE, 0x0F0A0481, 0x00F109F8, 0x08040504);
	r7 = D(r7, s0_0_0, 0x031B0119, 0x1B05EE3C, 0xF5EF0AC2, 0xEAFA01FF);
	r0 = D(r0, s0_0_1, 0xEC13F615, 0x09F4FEEC, 0xD302E5ED, 0x111B0907);
	r1 = D(r1, s0_0_1, 0x1481D27F, 0x18E80A18, 0xDEE6E6E8, 0x1D05F63C);
	r2 = D(r2, s0_0_1, 0xE3FDF8F7, 0x1B020326, 0xF112F22B, 0x1F11F1D7);
	r3 = D(r3, s0_0_1, 0x19044726, 0x0E03FF14, 0x0AFFFA24, 0x07EE0B40);
	r4 = D(r4, s0_0_1, 0x2FFB09D4, 0xFE81F5ED, 0xE5EFFA1D, 0x0BF20E01);
	r5 = D(r5, s0_0_1, 0xF60C012E, 0x08ECEAAE, 0x05F7163D, 0xF309FA12);
	r6 = D(r6, s0_0_1, 0xD0EAB50F, 0xFDFE1D05, 0xF5171BCE, 0x05FEFD12);
	r7 = D(r7, s0_0_1, 0xF801F10C, 0x0B14F4DE, 0x4EF40610, 0x0DFB1BDC);
	r0 = D(r0, s0_0_2, 0x0D070010, 0xF9FB020F, 0x00F1CC1A, 0x190DFB02);
	r1 = D(r1, s0_0_2, 0xC7FE364B, 0xF50A00EF, 0x16FDFCEB, 0xF419260B);
	r2 = D(r2, s0_0_2, 0xFF01FA0D, 0x19FF00F7, 0xF709ED16, 0x0518F51C);
	r3 = D(r3, s0_0_2, 0x08091FCE, 0xFFFFFC07, 0x0D1008FC, 0x0D0026F7);
	r4 = D(r4, s0_0_2, 0xF1FD18F3, 0xF3D64104, 0xFC1401F9, 0xD51C01F1);
	r5 = D(r5, s0_0_2, 0xEDFCF8F3, 0x3EF2D21E, 0x1F190403, 0x010BF212);
	r6 = D(r6, s0_0_2, 0xE204A916, 0xF21401FF, 0x020911F3, 0x0408FC08);
	r7 = D(r7, s0_0_2, 0x1406FA04, 0xFCF5F413, 0x0A22352E, 0x0006F81C);
	r0 = D(r0, s0_1_0, 0xE0EA0D29, 0xFAFCFCF2, 0x0019FBD3, 0xE51CF028);
	r1 = D(r1, s0_1_0, 0x2C0C48E5, 0x0AE5D1B8, 0x0C0A0E40, 0xEAE528C4);
	r2 = D(r2, s0_1_0, 0xF3E7F4FB, 0x03FE812F, 0x1F152892, 0xFF18811A);
	r3 = D(r3, s0_1_0, 0x06C0EF1C, 0xF3FD06B2, 0x0500F73C, 0xF1F50BF7);
	r4 = D(r4, s0_1_0, 0x0AFB0108, 0xEB9AD900, 0xD7EE0619, 0xDDE1DFEE);
	r5 = D(r5, s0_1_0, 0x1E06F7DA, 0x082207BE, 0xFCCC2B27, 0x0C0FF404);
	r6 = D(r6, s0_1_0, 0xF029E9E7, 0x0188F620, 0xF8FE06DB, 0x07ED030C);
	r7 = D(r7, s0_1_0, 0xFCE30469, 0x092B0DFF, 0x11D70A3C, 0xEE0FEF79);
	r0 = D(r0, s0_1_1, 0x27042A1D, 0x0C2BFD1E, 0x2218FB42, 0x2F070AF2);
	r1 = D(r1, s0_1_1, 0x3E5B262B, 0x071FFBF1, 0xF232E4E4, 0x12FCF00B);
	r2 = D(r2, s0_1_1, 0xFDD43503, 0x10FCE73B, 0x1219136F, 0xE209AB0D);
	r3 = D(r3, s0_1_1, 0x13F7E4E2, 0x001AE4DC, 0xFFD80FC9, 0xF1E0EBC5);
	r4 = D(r4, s0_1_1, 0xF7EAF31E, 0xEEA9F917, 0x0F0CE7EC, 0xEAC5E40A);
	r5 = D(r5, s0_1_1, 0x19FB2315, 0xF4270613, 0x001F1B28, 0x0DD1F90E);
	r6 = D(r6, s0_1_1, 0xFA9C10DF, 0xED08811B, 0x16FB1E14, 0xFD14F202);
	r7 = D(r7, s0_1_1, 0x180EFEFC, 0x0C3807F3, 0xFD1E231B, 0x16082F0D);
	r0 = D(r0, s0_1_2, 0xDEF9F724, 0x01041BFF, 0xFD20FE04, 0x1716EE1C);
	r1 = D(r1, s0_1_2, 0xF5F33E22, 0xEFF1F128, 0x1511FAF5, 0xEBFFE025);
	r2 = D(r2, s0_1_2, 0xFCF610ED, 0x1E0DCA1F, 0x052BFA09, 0x19280EF4);
	r3 = D(r3, s0_1_2, 0x080900FC, 0x011B07FE, 0x100515EF, 0x08D4C011);
	r4 = D(r4, s0_1_2, 0xDBE781D7, 0xFB9CF6F4, 0x28FD2A06, 0xCEEAF7E8);
	r5 = D(r5, s0_1_2, 0x03EED4FD, 0x14CEF5F3, 0x16F40803, 0xF5FEF107);
	r6 = D(r6, s0_1_2, 0xF802F3FF, 0x0E1CE5DE, 0x20041AFA, 0x09FEFFFB);
	r7 = D(r7, s0_1_2, 0x0C181107, 0x030DF6E6, 0x2A18E305, 0x06FAFE08);
	r0 = D(r0, s0_2_0, 0x060A0407, 0x02F20203, 0xE916DD41, 0xEEE82326);
	r1 = D(r1, s0_2_0, 0x1C07CF7F, 0x043505E7, 0xFDDDF019, 0xFB07E0EF);
	r2 = D(r2, s0_2_0, 0xFECCFAFA, 0x0AFE0220, 0x144115CD, 0x21BFDEED);
	r3 = D(r3, s0_2_0, 0xE5CA03D4, 0x03FE06F6, 0x09D8F412, 0xF5E7F4F1);
	r4 = D(r4, s0_2_0, 0x1427E7F6, 0x0408D203, 0x24B7F3D5, 0x10DDE9C2);
	r5 = D(r5, s0_2_0, 0x0A0B01DC, 0x09080424, 0x101FE2FF, 0x09FEF6FC);
	r6 = D(r6, s0_2_0, 0x0FF5ECF1, 0xEFCE06F9, 0x04FEFEF2, 0x0B01F9F9);
	r7 = D(r7, s0_2_0, 0x12F2FEB5, 0xE9F1EB3F, 0x022AFA06, 0xE936F8FD);
	r0 = D(r0, s0_2_1, 0xE61AC201, 0xFC15FC09, 0x25FDE3D1, 0x2E15F20E);
	r1 = D(r1, s0_2_1, 0x1EF3AB32, 0x0623292F, 0x00F2FD0D, 0x08FEF701);
	r2 = D(r2, s0_2_1, 0xFAD5FBF8, 0x220609E9, 0x21D0EE1C, 0xF3181B0B);
	r3 = D(r3, s0_2_1, 0x12BE1002, 0x140104FB, 0xFC04F9F7, 0x00FB0902);
	r4 = D(r4, s0_2_1, 0x1BD5DAFC, 0xF13DFAF6, 0x27BC41DA, 0x16F510F7);
	r5 = D(r5, s0_2_1, 0x1CD41E0E, 0x0F0A0716, 0x19181C08, 0x12FE0407);
	r6 = D(r6, s0_2_1, 0x14CF0609, 0x15E6E60B, 0x1CEB0CE4, 0x03F3FEF8);
	r7 = D(r7, s0_2_1, 0x1D15010D, 0xF8180C41, 0x19190729, 0xE1EAFB11);
	r0 = D(r0, s0_2_2, 0xE90AD808, 0xFE0702FF, 0xFB000A11, 0x0D18E93A);
	r1 = D(r1, s0_2_2, 0x18ECCF04, 0xFA12ED10, 0x001BF6F9, 0x01F612E0);
	r2 = D(r2, s0_2_2, 0x00FEF9F4, 0x11F6F90F, 0xF8DAF025, 0x10F309EF);
	r3 = D(r3, s0_2_2, 0x18F6EA0E, 0x070B0907, 0xF7F809F6, 0x0507070B);
	r4 = D(r4, s0_2_2, 0x21BFEAF3, 0x06D4030C, 0x170631EF, 0xF00414D2);
	r5 = D(r5, s0_2_2, 0x0FD40200, 0x2EC7F60E, 0x1BFD0DFB, 0x06FA00FC);
	r6 = D(r6, s0_2_2, 0x171CF5FD, 0x17FC0CE9, 0xF9DEED39, 0x00F7F8FD);
	r7 = D(r7, s0_2_2, 0x25EF20E4, 0xF3FDE60A, 0xEA11F530, 0xFCF8ECF2);
	r0 = D(r0, s1_0_0, 0xF32F070C, 0xFD0BF6F2, 0xE50911F2, 0x1313E10E);
	r1 = D(r1, s1_0_0, 0x7FB803F4, 0x38100002, 0x1801F418, 0x1221B90E);
	r2 = D(r2, s1_0_0, 0x09110307, 0xF5F4DCE9, 0x07F511F7, 0xEB2DF612);
	r3 = D(r3, s1_0_0, 0x1EF7F1E2, 0x0FF31AF1, 0xFA08E9EB, 0xFB0A1209);
	r4 = D(r4, s1_0_0, 0x050111F7, 0x40F40721, 0xE816FBD9, 0xF90AF6D9);
	r5 = D(r5, s1_0_0, 0x0CFEEEF7, 0x130611E1, 0x2FE0B427, 0xF405F306);
	r6 = D(r6, s1_0_0, 0x19D0E2FC, 0x100BFEFD, 0x2EF1FA13, 0xFEFB050D);
	r7 = D(r7, s1_0_0, 0x03F6E8F3, 0xE803250B, 0xFA1B3520, 0x02040B08);
	r0 = D(r0, s1_0_1, 0xE30D22E3, 0xFEE85A1E, 0xFC0DA3DF, 0xF3E80903);
	r1 = D(r1, s1_0_1, 0x45FA52DB, 0x3200FEFB, 0xCE1EEED9, 0xF7FD3F0D);
	r2 = D(r2, s1_0_1, 0xE90006EC, 0xDB1D1002, 0xFBF00EEA, 0x12271AF2);
	r3 = D(r3, s1_0_1, 0xFC00F309, 0x080BCF06, 0xFA0E3E0B, 0xE7DB4D0B);
	r4 = D(r4, s1_0_1, 0xF608F006, 0xCB19E3E1, 0xE9EE1913, 0xE218FD23);
	r5 = D(r5, s1_0_1, 0x1218D3EE, 0x25F9EEEA, 0xC2D1DE18, 0x09E17F0E);
	r6 = D(r6, s1_0_1, 0x42EE0426, 0x09240FFF, 0x322EBED6, 0x0200D5DB);
	r7 = D(r7, s1_0_1, 0xE3031437, 0xF0F2EA08, 0xCD08A8E0, 0x07F9FFED);
	r0 = D(r0, s1_0_2, 0x1905D20C, 0xF412FBF7, 0xEE132030, 0x15F4120F);
	r1 = D(r1, s1_0_2, 0x9ED9CD03, 0xDCECF406, 0xF4FEF9DD, 0x1007FDDB);
	r2 = D(r2, s1_0_2, 0x0808F501, 0x1706DFE5, 0x00EF2D00, 0xDFEEF205);
	r3 = D(r3, s1_0_2, 0xE1150403, 0xF3FD0EF6, 0x25F8E114, 0xECFDF0EB);
	r4 = D(r4, s1_0_2, 0xCB060800, 0x1807D52E, 0xF90A0116, 0xA4EC1C20);
	r5 = D(r5, s1_0_2, 0x2DF71EFC, 0x0004F605, 0x0FDA0CFD, 0x11FD08FA);
	r6 = D(r6, s1_0_2, 0x53CB45F3, 0xE010FEFD, 0x0E08CA19, 0xF8F8050B);
	r7 = D(r7, s1_0_2, 0x0A0903E5, 0x1AFA13F4, 0xF4C01528, 0xF80614F4);
	r0 = D(r0, s1_1_0, 0x072A2BE0, 0x0009FD07, 0xF8000726, 0x0E2AF9D1);
	r1 = D(r1, s1_1_0, 0xC2F4022D, 0xFF02F4FA, 0xF1F8EC1A, 0xDB3EF610);
	r2 = D(r2, s1_1_0, 0xEF2F10CE, 0xFEFB160D, 0x031606F4, 0x1831F626);
	r3 = D(r3, s1_1_0, 0x1001FCD7, 0x16DD07F5, 0xFC1CF4E9, 0x11EEDDFE);
	r4 = D(r4, s1_1_0, 0x0CF7E008, 0xF9F61703, 0x1821FE16, 0xF62A2EEE);
	r5 = D(r5, s1_1_0, 0xEE120DFD, 0x08E610F8, 0xFEF4D5CB, 0xFF09F9F8);
	r6 = D(r6, s1_1_0, 0xE5E109D7, 0xFFEC07FF, 0x122B1BFF, 0x0BFB14E7);
	r7 = D(r7, s1_1_0, 0x0B11EC22, 0xF2D704EE, 0xF2FE08FD, 0xF6080E30);
	r0 = D(r0, s1_1_1, 0xE5883C39, 0xFD02FDF5, 0xC71BACF2, 0x01EBCE4F);
	r1 = D(r1, s1_1_1, 0x955F0BDD, 0xF251EB31, 0x81810516, 0xDAFA12AF);
	r2 = D(r2, s1_1_1, 0x12CB0331, 0x130BDA7F, 0x18E0C42F, 0x44161FF7);
	r3 = D(r3, s1_1_1, 0xFD1F131D, 0xFF27B6E7, 0x1C080DEE, 0xF20D0ECD);
	r4 = D(r4, s1_1_1, 0xEA0514F7, 0x21DEF7E3, 0xDE0FE4C0, 0xEB1A120A);
	r5 = D(r5, s1_1_1, 0xDBEFC3F1, 0xF90546C7, 0x346BFFD7, 0x189B0713);
	r6 = D(r6, s1_1_1, 0x0A10FDF2, 0x142E07ED, 0x0017B816, 0xF847F74E);
	r7 = D(r7, s1_1_1, 0xA1F73ECA, 0xBCB54601, 0x0F55C2FC, 0x040C1CD1);
	r0 = D(r0, s1_1_2, 0x1ADC03FA, 0x0008EEF9, 0xFC2C07B7, 0xE7E420F3);
	r1 = D(r1, s1_1_2, 0xB69C08EC, 0xED0E19F4, 0xDEF6340F, 0xFAD2E0FF);
	r2 = D(r2, s1_1_2, 0xFCFCFB08, 0xFE050C02, 0x0D0604F7, 0xC7BBFA08);
	r3 = D(r3, s1_1_2, 0xE107DED6, 0x0704FEF9, 0x090B1313, 0x0AE7EA33);
	r4 = D(r4, s1_1_2, 0x1AE31819, 0xFA1D22F8, 0xE7CEE0BA, 0xCBFBDBDF);
	r5 = D(r5, s1_1_2, 0xF0180F02, 0x070CF82C, 0x24BAEF18, 0x0FC4CD08);
	r6 = D(r6, s1_1_2, 0xF419E519, 0x0AEFF518, 0x27F510F9, 0x021109E0);
	r7 = D(r7, s1_1_2, 0xED00F60F, 0xEDF801F9, 0xF4D018E4, 0xF61B2227);
	r0 = D(r0, s1_2_0, 0x1BF3EC03, 0xFD03010A, 0xEAE40BD3, 0x15E5FE0C);
	r1 = D(r1, s1_2_0, 0x2B25F6DE, 0xFCFAFDFD, 0x0F09FDD8, 0x08F0F51D);
	r2 = D(r2, s1_2_0, 0x05F2060F, 0x10EC05EA, 0xF90B0CEA, 0xFEC0321E);
	r3 = D(r3, s1_2_0, 0x0203FE23, 0x07E0061B, 0x00210400, 0xFB1DFF22);
	r4 = D(r4, s1_2_0, 0xF5FF0DF8, 0x0B2210EB, 0xE803EC10, 0xEEDDF90D);
	r5 = D(r5, s1_2_0, 0x0913FA09, 0x11F7F500, 0xFFFA0FE7, 0xF72004F6);
	r6 = D(r6, s1_2_0, 0x0115F908, 0x2C19090F, 0x160B00FC, 0x00F3FCF7);
	r7 = D(r7, s1_2_0, 0xFBEAF217, 0x0810FB05, 0xEBB60DC9, 0x09D3E8FE);
	r0 = D(r0, s1_2_1, 0x2411F7E1, 0x03F201F9, 0x0A22DF3F, 0x0D2E14E9);
	r1 = D(r1, s1_2_1, 0x2008E926, 0x01FD01F8, 0x22F8EC05, 0x0AE7BEF2);
	r2 = D(r2, s1_2_1, 0xF3F10404, 0x1605EC0D, 0xEEE4AA25, 0x0008FDE5);
	r3 = D(r3, s1_2_1, 0x0D1104FF, 0x095CE924, 0xDFC2FE0D, 0x0F02DCEA);
	r4 = D(r4, s1_2_1, 0xDAF0ED0B, 0x1EFF0B24, 0xDC12E633, 0xBB000D0D);
	r5 = D(r5, s1_2_1, 0x1C16FA1A, 0x06EC1705, 0xE51FFA05, 0xF5EC01FA);
	r6 = D(r6, s1_2_1, 0xF21A0BF5, 0xFCE9F1F3, 0xF024E70F, 0xFA100CEB);
	r7 = D(r7, s1_2_1, 0xE482E8E7, 0x09E0F401, 0xB905D30F, 0xFFE7E9DE);
	r0 = D(r0, s1_2_2, 0x1E88E31B, 0x04F50008, 0xD7ECFD10, 0xE9FF03CB);
	r1 = D(r1, s1_2_2, 0x2004ED10, 0x1ADE0FFD, 0x1BE1F311, 0x0425071F);
	r2 = D(r2, s1_2_2, 0x021AEAF5, 0x07F20AFB, 0x0CB93F02, 0xEDF704DD);
	r3 = D(r3, s1_2_2, 0x31D9F910, 0xFA1F07FC, 0xE709F3F9, 0x0B1BFBF6);
	r4 = D(r4, s1_2_2, 0x0D07F9E2, 0x1AE2FEF2, 0xE0060818, 0xE7F7E403);
	r5 = D(r5, s1_2_2, 0x0C021506, 0x54F006E9, 0xDC180812, 0x061EF8F4);
	r6 = D(r6, s1_2_2, 0xEF17FC10, 0xE8E9F6FA, 0xF10A56E0, 0xFEF6090E);
	r7 = D(r7, s1_2_2, 0x17CFE3E9, 0x08DDB00F, 0xDEAF190F, 0x151703FB);
	s0_0_0 = G[6][xy.y+0][xy.x+0]; s0_0_1 = G[6][xy.y+0][xy.x+1];
	s0_0_2 = G[6][xy.y+0][xy.x+2]; s0_1_0 = G[6][xy.y+1][xy.x+0];
	s0_1_1 = G[6][xy.y+1][xy.x+1]; s0_1_2 = G[6][xy.y+1][xy.x+2];
	s0_2_0 = G[6][xy.y+2][xy.x+0]; s0_2_1 = G[6][xy.y+2][xy.x+1];
	s0_2_2 = G[6][xy.y+2][xy.x+2]; s1_0_0 = G[7][xy.y+0][xy.x+0];
	s1_0_1 = G[7][xy.y+0][xy.x+1]; s1_0_2 = G[7][xy.y+0][xy.x+2];
	s1_1_0 = G[7][xy.y+1][xy.x+0]; s1_1_1 = G[7][xy.y+1][xy.x+1];
	s1_1_2 = G[7][xy.y+1][xy.x+2]; s1_2_0 = G[7][xy.y+2][xy.x+0];
	s1_2_1 = G[7][xy.y+2][xy.x+1]; s1_2_2 = G[7][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xD902FD14, 0x12F408F2, 0x152CE8F2, 0xF6F51B13);
	r1 = D(r1, s0_0_0, 0xC406D5F9, 0x81F429D2, 0x8EE51A2F, 0xD4FA04DB);
	r2 = D(r2, s0_0_0, 0xE20CFFEF, 0x81660529, 0xFBE6F612, 0x81042728);
	r3 = D(r3, s0_0_0, 0xF10B2119, 0xF0010C11, 0x0510071E, 0xFD1AE505);
	r4 = D(r4, s0_0_0, 0xE61008FD, 0x00093900, 0xF602E90A, 0xCD0C2CD6);
	r5 = D(r5, s0_0_0, 0x1D0D0D03, 0x33E702A8, 0xE7FA08FF, 0xEC0D0020);
	r6 = D(r6, s0_0_0, 0x9834EB20, 0x1217FE1A, 0x15C40EE2, 0x1A070214);
	r7 = D(r7, s0_0_0, 0x2812F40B, 0xCD29DCD8, 0xDDDB14E2, 0x29F004F5);
	r0 = D(r0, s0_0_1, 0x0AEDF8E9, 0x25180115, 0xB7020B00, 0xF303FA32);
	r1 = D(r1, s0_0_1, 0xCA1928C1, 0xDAE8EA32, 0x0A3506EB, 0x02EEFEFC);
	r2 = D(r2, s0_0_1, 0xFFEA040D, 0x21F80F1B, 0xEEF0052E, 0xD3EAF523);
	r3 = D(r3, s0_0_1, 0x35F4ECDC, 0xF206F602, 0x49FD0FD9, 0x0DFB1CEC);
	r4 = D(r4, s0_0_1, 0xECFA08ED, 0x3AEC0EEE, 0xD00E0314, 0xDCE2DFEC);
	r5 = D(r5, s0_0_1, 0xD61BF831, 0xF1E719FE, 0x30EAFADF, 0xD9F40B2F);
	r6 = D(r6, s0_0_1, 0x8121DE0E, 0xFCEE03F6, 0xFDD4D8BD, 0x0D0002D0);
	r7 = D(r7, s0_0_1, 0xB6021008, 0xE9F01029, 0x5AE0FA9E, 0x3FF7F6CC);
	r0 = D(r0, s0_0_2, 0xFAF31101, 0xF7F9F30C, 0xEF1C041B, 0xF00CF9E9);
	r1 = D(r1, s0_0_2, 0xE8110C07, 0x1DF3FFF1, 0x2206D4ED, 0x040F0DF0);
	r2 = D(r2, s0_0_2, 0xFC0FFDF3, 0x0317E9DC, 0xF9FE1100, 0x0807EDDE);
	r3 = D(r3, s0_0_2, 0x10FCF1F0, 0xFC000200, 0x05FEE9E7, 0x10FCFC08);
	r4 = D(r4, s0_0_2, 0xE617DE2E, 0x2AF2C131, 0xE8E61BFF, 0x0BE813F9);
	r5 = D(r5, s0_0_2, 0xCE0E0339, 0xEC23FB37, 0xF920F7FA, 0x0817FF02);
	r6 = D(r6, s0_0_2, 0xEA112BC8, 0xEE1208E9, 0x1DFC15E9, 0x0102F1FF);
	r7 = D(r7, s0_0_2, 0xF118FCFC, 0xEAE00B10, 0x08E4F72D, 0x16F21113);
	r0 = D(r0, s0_1_0, 0xE5EDED01, 0xEEF7040E, 0xD832D709, 0x250B05D3);
	r1 = D(r1, s0_1_0, 0x0411E2F5, 0x100EF6CF, 0x1EE31AFB, 0x0B24121F);
	r2 = D(r2, s0_1_0, 0xF00700E7, 0xF505FF2C, 0x1215EFCE, 0xCC342732);
	r3 = D(r3, s0_1_0, 0x0DEC0B13, 0x0FFDEDE3, 0xF7F11013, 0x2714ECDE);
	r4 = D(r4, s0_1_0, 0xFDE9F715, 0xF717F4F7, 0xF41D0F09, 0xFEFFFF2C);
	r5 = D(r5, s0_1_0, 0x0720EEF4, 0xE306D306, 0x23F0E1F6, 0x03F90BF7);
	r6 = D(r6, s0_1_0, 0x2CF1F6F3, 0x8139EA06, 0x39D50AD8, 0xF50700FA);
	r7 = D(r7, s0_1_0, 0xE0FC022C, 0x0A20FEF6, 0xFD1CC9F7, 0xF9EE041A);
	r0 = D(r0, s0_1_1, 0x31290531, 0x0B050AEF, 0x0A3006BE, 0x0A01071E);
	r1 = D(r1, s0_1_1, 0x35EC0781, 0xAC01023F, 0x81D7F80D, 0x0EF40806);
	r2 = D(r2, s0_1_1, 0x01EFFE1A, 0xE70AF61D, 0xF834FD2A, 0x0EF3D703);
	r3 = D(r3, s0_1_1, 0x2013E412, 0xE1F404EF, 0xDBC51200, 0xD7000408);
	r4 = D(r4, s0_1_1, 0xB0D618BA, 0xD7ED12F1, 0x1EF3D0DA, 0xDDCDE80C);
	r5 = D(r5, s0_1_1, 0x11F10719, 0x5608F9D0, 0xF211D90F, 0x2218E81A);
	r6 = D(r6, s0_1_1, 0x28F80B1C, 0xECE1070F, 0x0D0FEC1E, 0x07F0F50A);
	r7 = D(r7, s0_1_1, 0x0BC71CD3, 0xE231A70E, 0xEEF8A50B, 0xD601FB17);
	r0 = D(r0, s0_1_2, 0xCD441603, 0x0BF3FFF9, 0xDBDC11D0, 0xFE0BF404);
	r1 = D(r1, s0_1_2, 0x34E81CA1, 0x0834F8FB, 0x28D217C3, 0x1C1CE5E4);
	r2 = D(r2, s0_1_2, 0x01FBFDFA, 0x0AF71311, 0xF80F030A, 0x2EFE06E9);
	r3 = D(r3, s0_1_2, 0x0BEA26EB, 0x03F010FC, 0xFEFBF02B, 0xDC010D0A);
	r4 = D(r4, s0_1_2, 0xA08181F9, 0xEE16F011, 0x0F0C09B1, 0xC8581EFE);
	r5 = D(r5, s0_1_2, 0x083A1304, 0x93081A3B, 0x140CF5F4, 0x0321F8EA);
	r6 = D(r6, s0_1_2, 0x11FE04DB, 0xF9130204, 0xFDEE0737, 0xFDFC11FA);
	r7 = D(r7, s0_1_2, 0xEA20EC12, 0xECFF1A22, 0xEC07D309, 0x0CF50D13);
	r0 = D(r0, s0_2_0, 0xF00E130C, 0x00010300, 0x030404E2, 0x0A09F7EA);
	r1 = D(r1, s0_2_0, 0x1BF4F1FD, 0x08C41210, 0xED19FDF4, 0x0D0BFBD4);
	r2 = D(r2, s0_2_0, 0xF918F5F6, 0xED12022A, 0x41FAE5DD, 0xF91FF408);
	r3 = D(r3, s0_2_0, 0xEF260407, 0xF8FFFF1A, 0xFC02FF00, 0xF807FF27);
	r4 = D(r4, s0_2_0, 0xE7FA0315, 0xF827F0D4, 0x05FFF91C, 0xFA000B18);
	r5 = D(r5, s0_2_0, 0x0215FDE3, 0xD71D0718, 0xE9051026, 0x0EF20DFC);
	r6 = D(r6, s0_2_0, 0xF7FD0A1A, 0xFEE713FC, 0x21E805F8, 0x09FFFFFC);
	r7 = D(r7, s0_2_0, 0x01FC1602, 0xEDD116FE, 0x17E007E6, 0x0E1BFBD7);
	r0 = D(r0, s0_2_1, 0xF7F90D20, 0xFA0701F7, 0xCF011621, 0x2DF410C7);
	r1 = D(r1, s0_2_1, 0x00D42413, 0x13E0F20B, 0xBD19E933, 0x14D41EE9);
	r2 = D(r2, s0_2_1, 0x0600FA13, 0xF8060BF9, 0x33DEF6FA, 0x17E9C415);
	r3 = D(r3, s0_2_1, 0x2F25D2E8, 0xF4FFFA0C, 0x100902EF, 0xFDF30BFF);
	r4 = D(r4, s0_2_1, 0xD032A516, 0xE4ED14FC, 0x31EDD8F5, 0xEB142DE2);
	r5 = D(r5, s0_2_1, 0x15C804E7, 0xE830F2F7, 0x0C0DF0EE, 0x0DF901FD);
	r6 = D(r6, s0_2_1, 0x0C1005E6, 0x0DF9EFE3, 0xF10FD425, 0xF306F70A);
	r7 = D(r7, s0_2_1, 0x04FD25F2, 0xE022FD2B, 0xFB280122, 0x1B21F4F5);
	r0 = D(r0, s0_2_2, 0x1AE508CD, 0xF406FF02, 0xE6DE171A, 0x20D32803);
	r1 = D(r1, s0_2_2, 0xD6DB194E, 0x1A25E5E4, 0xF12CF1E1, 0x0809EC2D);
	r2 = D(r2, s0_2_2, 0x0602FCF1, 0xFDF32605, 0x07F71CED, 0x32FFDFD3);
	r3 = D(r3, s0_2_2, 0x0CFA13FA, 0x0E0AF0FE, 0xF5EDFF16, 0xEDF11219);
	r4 = D(r4, s0_2_2, 0xF424810A, 0x19D7FA21, 0x37EF0ED6, 0xF216C42A);
	r5 = D(r5, s0_2_2, 0x1411FEE6, 0xFEAD4107, 0x27E3FD04, 0x10F1FFF8);
	r6 = D(r6, s0_2_2, 0x15FF07F8, 0x0C11F2FF, 0x0318FD22, 0xF60DF905);
	r7 = D(r7, s0_2_2, 0x0CDF04FF, 0x16F5E8F9, 0x1527FCF4, 0x09F00301);
	r0 = D(r0, s1_0_0, 0x162F26E9, 0x050DFFFC, 0x03EA05F4, 0x1101E7E3);
	r1 = D(r1, s1_0_0, 0x7FFAFCFC, 0x3D08E0FC, 0xF15C1FD9, 0x047746B1);
	r2 = D(r2, s1_0_0, 0x2B15EC09, 0x00F3F7FE, 0x00CE20F8, 0x0802C9DF);
	r3 = D(r3, s1_0_0, 0x00FBE002, 0x110505FE, 0x0AEBF9FB, 0xCDEBEB2A);
	r4 = D(r4, s1_0_0, 0x460AFCF4, 0x28E829B1, 0x1D2C1800, 0x3CEA0FE6);
	r5 = D(r5, s1_0_0, 0xFEF205FA, 0x05221605, 0xE0DEBE23, 0xD913F1F0);
	r6 = D(r6, s1_0_0, 0xC62DFA11, 0xF9EAFA3C, 0x0E0BFBD9, 0x1BFDFDE2);
	r7 = D(r7, s1_0_0, 0x0A0C0ED5, 0xCA070719, 0x62410517, 0x39F0DCFF);
	r0 = D(r0, s1_0_1, 0xDF0BF21B, 0x21ECFDF2, 0x1C082800, 0x1AE9F10C);
	r1 = D(r1, s1_0_1, 0x369FB3F2, 0xF501F907, 0x11F70011, 0x16F72819);
	r2 = D(r2, s1_0_1, 0xE8FA0A27, 0xB9FD0F15, 0xF9E61B0B, 0xF0DAEA0C);
	r3 = D(r3, s1_0_1, 0x31EFBDF5, 0x0915F802, 0xF90114EF, 0xE2F715E0);
	r4 = D(r4, s1_0_1, 0x0C07F20A, 0xD0D3C991, 0xE702FFEF, 0x4414FAEC);
	r5 = D(r5, s1_0_1, 0xEEFF091B, 0x000EDDF4, 0xDFCEFB0B, 0xDDFD0806);
	r6 = D(r6, s1_0_1, 0x102FEFEF, 0xFF00EBE8, 0xC2F6F807, 0x140AED09);
	r7 = D(r7, s1_0_1, 0xFF24F6DD, 0xFBFCF405, 0xBA15EEAA, 0xB93015D2);
	r0 = D(r0, s1_0_2, 0x040AF5F7, 0x0A0AFF00, 0xAA0E7FC8, 0x2007E6F8);
	r1 = D(r1, s1_0_2, 0xE64BF4CF, 0xF0ED0210, 0xE2E33B12, 0x44EEE200);
	r2 = D(r2, s1_0_2, 0x0F00F31A, 0x09F7F8FD, 0xECF7E4E1, 0x01FFECF8);
	r3 = D(r3, s1_0_2, 0x7206E8F9, 0xF90706EE, 0x0BF2F8FF, 0x0D070604);
	r4 = D(r4, s1_0_2, 0x1742F707, 0xB82867D7, 0xFDE4FAFD, 0x46D3FA1A);
	r5 = D(r5, s1_0_2, 0xEC23F3E5, 0xFDED0C12, 0x08E90408, 0xF306F6FD);
	r6 = D(r6, s1_0_2, 0xF0FE3134, 0xEE1FF5DD, 0xF3DD07F6, 0x0005F4FC);
	r7 = D(r7, s1_0_2, 0x0413EDF6, 0xF81B0AEB, 0x12C9E4E2, 0xFADF0511);
	r0 = D(r0, s1_1_0, 0xECED0426, 0x1306FA0F, 0x2E02D731, 0xDA04FFED);
	r1 = D(r1, s1_1_0, 0x814E071A, 0xD90E12AE, 0x214E1AFA, 0x32B5BE7F);
	r2 = D(r2, s1_1_0, 0xF3C91481, 0x41F408E0, 0xCCF9E635, 0xA5E7DAC2);
	r3 = D(r3, s1_1_0, 0x8118AFEE, 0xFFFBFF27, 0x3AFCE907, 0xA0221AC5);
	r4 = D(r4, s1_1_0, 0x1104EB0B, 0x50F6016F, 0xEE00E340, 0x81D6F7FC);
	r5 = D(r5, s1_1_0, 0x1CFB10E6, 0x39FA1DE2, 0x66ECCBD1, 0x0DF90120);
	r6 = D(r6, s1_1_0, 0xECF2E21E, 0xF208EAAC, 0x7FF70E09, 0x0BF2FDF9);
	r7 = D(r7, s1_1_0, 0xDE151C13, 0x3AD7190D, 0xFAF3EF36, 0xC1EB03D2);
	r0 = D(r0, s1_1_1, 0xFBD50A11, 0xE5EC013F, 0x2AA6FC5A, 0xE6C9D807);
	r1 = D(r1, s1_1_1, 0x81451C29, 0xE7242E04, 0x05811F92, 0xF908D721);
	r2 = D(r2, s1_1_1, 0x0B2C00D2, 0x373609DC, 0x4311F217, 0x59FC4174);
	r3 = D(r3, s1_1_1, 0x81E79DF4, 0xFAE8140F, 0x44F3F4A3, 0x20FF1EE3);
	r4 = D(r4, s1_1_1, 0xEFB1F99C, 0xB3021C28, 0xE6222DB0, 0x51E714E6);
	r5 = D(r5, s1_1_1, 0xBE34F205, 0x43A10729, 0x1F0FF1FB, 0xE5FF10E8);
	r6 = D(r6, s1_1_1, 0x2D992DF2, 0xC70CB221, 0xED16E3EB, 0x12FDEE15);
	r7 = D(r7, s1_1_1, 0x02CFCFE2, 0x0939F95F, 0xBFD1B00A, 0xB4BED8F0);
	r0 = D(r0, s1_1_2, 0xF3E7E203, 0x160302F2, 0xFAE5ED15, 0xFDFFE4F1);
	r1 = D(r1, s1_1_2, 0x81B4D150, 0x08F5070C, 0x2AF806FF, 0xE511F20D);
	r2 = D(r2, s1_1_2, 0x280504F4, 0xA7FA2118, 0x11F70B06, 0x1EFEDE0B);
	r3 = D(r3, s1_1_2, 0x2207E3F8, 0xFEFAFFF6, 0x3A1308EF, 0xF923E609);
	r4 = D(r4, s1_1_2, 0xC60E2418, 0x9409D951, 0x1F02DCF5, 0x3519F4F0);
	r5 = D(r5, s1_1_2, 0xB95BCEFB, 0xF2140A23, 0x01FB0E0B, 0xEF03FB08);
	r6 = D(r6, s1_1_2, 0xF12B22E3, 0x25230CF5, 0x26E2F9F8, 0x08FF0311);
	r7 = D(r7, s1_1_2, 0x19F80BFC, 0xBF0B0306, 0xEC12CDF0, 0x16F703F0);
	r0 = D(r0, s1_2_0, 0xA6EF0811, 0xE40204FE, 0xAC1510EA, 0x81F9EDE6);
	r1 = D(r1, s1_2_0, 0x81F7F122, 0x2416F8F6, 0x361AFD20, 0x02F62BD5);
	r2 = D(r2, s1_2_0, 0xCDCB0BF9, 0x9CEB07F9, 0x81DAFAF0, 0x1EC81A0E);
	r3 = D(r3, s1_2_0, 0x81F9EFF3, 0x35000A03, 0x7FFBF42D, 0x21EAFD18);
	r4 = D(r4, s1_2_0, 0xF7251AE1, 0x0C1D10E5, 0x81FD0B16, 0x81E01A2C);
	r5 = D(r5, s1_2_0, 0xB7FA0D2E, 0x81371AF2, 0xFBE20514, 0x7F030406);
	r6 = D(r6, s1_2_0, 0x450E0AD1, 0x2DE8150A, 0xD4CBD908, 0xF5FC0807);
	r7 = D(r7, s1_2_0, 0xC4E71E1A, 0x052211E5, 0xD1C81716, 0x831409F7);
	r0 = D(r0, s1_2_1, 0x5C1CF20B, 0xECF604F4, 0x3C0FF506, 0x62D7F810);
	r1 = D(r1, s1_2_1, 0x7F1BEB11, 0xE711DB1C, 0x236103F2, 0xDB4317EB);
	r2 = D(r2, s1_2_1, 0xF115FD15, 0x81FA1B04, 0x7FE8F521, 0x26C7D0EF);
	r3 = D(r3, s1_2_1, 0xACDCEE1E, 0xF11AFCF9, 0x73F2FB05, 0xFFF5F818);
	r4 = D(r4, s1_2_1, 0xEA1E0318, 0x42F1FFFA, 0x81EB05D3, 0xC62F17F8);
	r5 = D(r5, s1_2_1, 0x200F042D, 0x7FBBFFE0, 0x16D00017, 0xBA06090F);
	r6 = D(r6, s1_2_1, 0xEFE8F603, 0x25011903, 0x8AF0FF0D, 0x110CFF07);
	r7 = D(r7, s1_2_1, 0xF811FD17, 0x703CFCD8, 0x432A082C, 0x22041401);
	r0 = D(r0, s1_2_2, 0x343ADE09, 0x010601FC, 0x3302EB10, 0xD809F2FD);
	r1 = D(r1, s1_2_2, 0x3B491DE0, 0x43F6F5F9, 0x16200DF3, 0x3AD3EFF5);
	r2 = D(r2, s1_2_2, 0xEFF3FF0E, 0x89F500FA, 0xAC3203E9, 0x2EF2EAF7);
	r3 = D(r3, s1_2_2, 0xE2FA0502, 0x0400FDEE, 0x220610F1, 0xC5000B05);
	r4 = D(r4, s1_2_2, 0xE139FB31, 0x20E40FF5, 0x45CC0AF0, 0x19220CED);
	r5 = D(r5, s1_2_2, 0x09ED07F0, 0xE5111B24, 0x38F601ED, 0xF2FAFA09);
	r6 = D(r6, s1_2_2, 0xFFD40DEF, 0xE6E4F700, 0xF6FBF4F6, 0xE7070003);
	r7 = D(r7, s1_2_2, 0x1CDF0A17, 0xFE25DDFA, 0xF72715F1, 0x0BE40412);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(1.872e-02, 7.830e-03, 1.108e-03, 5.881e-03);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(5.047e-02, 2.697e-03, 4.287e-02, 4.173e-02);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(1.878e-02, -6.352e-02, -3.929e-03, -1.205e-02);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(5.609e-02, 1.126e-04, 1.925e-02, -7.039e-03);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(2.145e-02, 6.862e-02, 6.519e-02, 1.296e-02);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(2.438e-02, -4.903e-02, 4.196e-02, 1.170e-02);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 0), f5);
	f6 = vec4(r6) * 6.2000124e-05;
	f6 += vec4(2.827e-03, 3.365e-02, -2.734e-02, -6.230e-03);
	f6 = clamp(f6, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f6);
	f7 = vec4(r7) * 6.2000124e-05;
	f7 += vec4(6.581e-02, -5.573e-03, 4.846e-02, 1.927e-02);
	f7 = clamp(f7, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 1), f7);
}

//!DESC [CuNNy_4x32_DS_vk] -conv2
//!HOOK LUMA
//!COMPUTE 32 16 8 8
//!BIND conv1
//!BIND LUMA
//!SAVE conv2
//!WIDTH LUMA.w 4 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[8][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(4, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec2 p;
			vec4 r, g, b, a;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(1, 1)) * conv1_pt;
			r = conv1_gather(p, 0);
			g = conv1_gather(p, 1);
			b = conv1_gather(p, 2);
			a = conv1_gather(p, 3);
			vec4 v0 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v1 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v2 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v3 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(3, 1)) * conv1_pt;
			r = conv1_gather(p, 0);
			g = conv1_gather(p, 1);
			b = conv1_gather(p, 2);
			a = conv1_gather(p, 3);
			vec4 v4 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v5 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v6 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v7 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
			G[6][ay][ax] = int(packSnorm4x8(v6));
			G[7][ay][ax] = int(packSnorm4x8(v7));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5, r6, r7;
	vec4 f0, f1, f2, f3, f4, f5, f6, f7;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0); r6 = ivec4(0); r7 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x04FA03EC, 0x06B9E4AF, 0xEA0F05AF, 0xFCEEF6F4);
	r1 = D(r1, s0_0_0, 0x12D1F514, 0xFF0E10E4, 0x0501FD02, 0xFFCE0C18);
	r2 = D(r2, s0_0_0, 0x020DF804, 0xF7F301F5, 0x02FF02FA, 0x01FFF4F9);
	r3 = D(r3, s0_0_0, 0xF5D60107, 0x24FC06FD, 0xFA090205, 0x02E80C15);
	r4 = D(r4, s0_0_0, 0x08E0030A, 0xFC040A01, 0x0300FC08, 0x01010306);
	r5 = D(r5, s0_0_0, 0x101CF7EA, 0x04110806, 0xFBFF0DF1, 0x07150FFF);
	r6 = D(r6, s0_0_0, 0x052AF90C, 0xF1DD0A00, 0x05FBF900, 0xFAEB050A);
	r7 = D(r7, s0_0_0, 0xF908F500, 0x02FA0318, 0xEBD80012, 0xEBC60019);
	r0 = D(r0, s0_0_1, 0xFEFBFCDC, 0x01B7F991, 0xEF18F6CA, 0xF12C00E7);
	r1 = D(r1, s0_0_1, 0xFB13115D, 0x1D24EAFF, 0x030AFF09, 0x05E80609);
	r2 = D(r2, s0_0_1, 0x0A17EDFB, 0x1A1DEEEB, 0x03FFFB01, 0x1614DB09);
	r3 = D(r3, s0_0_1, 0xE3CE100C, 0xF3010512, 0xF9FE07F9, 0xFFFB0905);
	r4 = D(r4, s0_0_1, 0xEBF305F4, 0x091E07FC, 0xF3F30104, 0x1002FB10);
	r5 = D(r5, s0_0_1, 0x220FF9E1, 0x03FD0F17, 0x060C0500, 0x01DE0C0B);
	r6 = D(r6, s0_0_1, 0xF00BE6F8, 0xD709FBFD, 0xFF15F903, 0xF2F0FCEA);
	r7 = D(r7, s0_0_1, 0x0B05FE02, 0xFA0406FB, 0x11F60620, 0x3113021A);
	r0 = D(r0, s0_0_2, 0x0F03F8F0, 0x08E1F5BD, 0x0BF709D6, 0x0615FBF2);
	r1 = D(r1, s0_0_2, 0x1CEDF700, 0xECF50CD9, 0x00FB0213, 0xFF03FF01);
	r2 = D(r2, s0_0_2, 0x063FF70E, 0x0E0300FB, 0xFD04FF00, 0x0B0FFB14);
	r3 = D(r3, s0_0_2, 0xFDEFFDD6, 0x1ADBF6ED, 0x01F9FDF6, 0x03F50220);
	r4 = D(r4, s0_0_2, 0xFBE702F7, 0x07060104, 0xEDF400F9, 0x04FB0407);
	r5 = D(r5, s0_0_2, 0xFD0805F0, 0x06FE0C0E, 0xFEF3FDE9, 0xFC03FFF8);
	r6 = D(r6, s0_0_2, 0xF705FAEE, 0xFCEBFEF4, 0x000AFD00, 0xEDFAF5FD);
	r7 = D(r7, s0_0_2, 0xF801FDFB, 0x00F703FC, 0x03E70013, 0x05E6FFF8);
	r0 = D(r0, s0_1_0, 0xE9E5FDFD, 0x0722DBD4, 0xF9F8F3BE, 0x1A13F8FA);
	r1 = D(r1, s0_1_0, 0x1DF081DF, 0xDE11D702, 0xEA07F0F8, 0xF111C8D5);
	r2 = D(r2, s0_1_0, 0x08FD100A, 0xFBD51411, 0xFD001100, 0x010F14F1);
	r3 = D(r3, s0_1_0, 0xFFC7F8F8, 0xEBE105EF, 0x04F60805, 0xE3F12416);
	r4 = D(r4, s0_1_0, 0xF5040E03, 0xFA17D8F7, 0xFF05EA06, 0x00A305FD);
	r5 = D(r5, s0_1_0, 0xF6131FE9, 0x0FF61A02, 0xF404E2F3, 0xF7FAFB04);
	r6 = D(r6, s0_1_0, 0xEF17DEF6, 0xF7D3FEF5, 0x09FA2300, 0x0AFEE0F3);
	r7 = D(r7, s0_1_0, 0x19F53C0A, 0x08E1F3ED, 0x0DECFA13, 0x06C70812);
	r0 = D(r0, s0_1_1, 0xFC0E2DF8, 0x13EBCEE4, 0x1A2D09CB, 0xFE1013EF);
	r1 = D(r1, s0_1_1, 0xFD472A05, 0x35DA0EFB, 0x150BDE15, 0x151514FC);
	r2 = D(r2, s0_1_1, 0xF2152538, 0x0E163EF1, 0x00105306, 0x033C3FDF);
	r3 = D(r3, s0_1_1, 0x0C11F5EE, 0x0BE809AC, 0xF7F80A05, 0x030EF608);
	r4 = D(r4, s0_1_1, 0x0E031906, 0x04051300, 0xFFFFFE0E, 0x0913FBFF);
	r5 = D(r5, s0_1_1, 0x14FDF6DD, 0xF71FEA36, 0xF4F2BFFD, 0xFED3F4EE);
	r6 = D(r6, s0_1_1, 0x01FA08F1, 0x1A10231A, 0x010204FF, 0xFBE2C720);
	r7 = D(r7, s0_1_1, 0xEDFB0FF6, 0x0CFEEAF7, 0xDD0D180A, 0xE0FFEB04);
	r0 = D(r0, s0_1_2, 0xFC13180D, 0xECBD0DFE, 0xF104FF0D, 0xFD0906F7);
	r1 = D(r1, s0_1_2, 0x36F90507, 0x05171701, 0xF906060E, 0xFEFF07FF);
	r2 = D(r2, s0_1_2, 0xE994FAFB, 0xF1E2FE10, 0xFEEEFCF1, 0xFB0609F8);
	r3 = D(r3, s0_1_2, 0x0D131325, 0xFA190EBA, 0x0601FD07, 0x0109121D);
	r4 = D(r4, s0_1_2, 0xF3F5F3EE, 0xF80AFEF9, 0x0AEBFB05, 0xFCFF0205);
	r5 = D(r5, s0_1_2, 0xFBF1F8D7, 0xFE080002, 0x060A0604, 0xFADDFDE7);
	r6 = D(r6, s0_1_2, 0xECF1F304, 0xF0DA0F0C, 0xFB04020A, 0x2FDEE1E2);
	r7 = D(r7, s0_1_2, 0x0FEDFEF1, 0x05FF0200, 0x0AB500EE, 0x12FE0DED);
	r0 = D(r0, s0_2_0, 0x0109F4EC, 0xE6FB02E6, 0xF203F7F4, 0xFE15FE00);
	r1 = D(r1, s0_2_0, 0xF11DBEFE, 0xE7F8E1DB, 0xFF05F1F9, 0x02F7E0F2);
	r2 = D(r2, s0_2_0, 0xF8090B07, 0xEAFBF9FE, 0x02F7FAFE, 0xF8FCF8FA);
	r3 = D(r3, s0_2_0, 0xDCF5EB14, 0xB30222DD, 0x04F805FF, 0xFFEFFC08);
	r4 = D(r4, s0_2_0, 0x000808F2, 0x0304F7FC, 0xE409FFFF, 0xEDFEFCF5);
	r5 = D(r5, s0_2_0, 0xFC17F4D9, 0x0DF20309, 0xF1FDEAEE, 0xF2FCFA03);
	r6 = D(r6, s0_2_0, 0xEEF7EC06, 0xFCFEF20E, 0x03FE0305, 0x09F6EFFE);
	r7 = D(r7, s0_2_0, 0x01F81C03, 0x010B1E01, 0x17F707FC, 0x1AA608E6);
	r0 = D(r0, s0_2_1, 0x0B0E0605, 0xDB140A02, 0xE908FD04, 0xFB10F4ED);
	r1 = D(r1, s0_2_1, 0xF92621EE, 0xD03CF4C5, 0x08EF050A, 0xEFFD0A03);
	r2 = D(r2, s0_2_1, 0xF622F6EB, 0xD40FDAE4, 0xF21201FC, 0xF313F3EF);
	r3 = D(r3, s0_2_1, 0xFEDCF91E, 0x298ED3A2, 0x01F4F704, 0xE6F6E012);
	r4 = D(r4, s0_2_1, 0x0903FF03, 0xF10F21F4, 0xFC072305, 0x19D710F2);
	r5 = D(r5, s0_2_1, 0xF912F2E8, 0x1510DF11, 0x0002F807, 0xCD15F6F6);
	r6 = D(r6, s0_2_1, 0xFD0BF216, 0xEB1FFCFD, 0x02F7DA07, 0x0B0FB1D2);
	r7 = D(r7, s0_2_1, 0x0AFEF103, 0x1BF002F8, 0xE11C09F9, 0xF7E4FEF8);
	r0 = D(r0, s0_2_2, 0xFA0BF811, 0xEC01F700, 0xF2090115, 0xEF0D0409);
	r1 = D(r1, s0_2_2, 0x07D2FBFD, 0x1B1AFFFC, 0xFC06FE09, 0x0604FBFC);
	r2 = D(r2, s0_2_2, 0x0EF0E5ED, 0x0AEF010E, 0x00080408, 0xF601040A);
	r3 = D(r3, s0_2_2, 0xF2DFF4F0, 0xEFDB14DC, 0x02FFFE01, 0x17F000F7);
	r4 = D(r4, s0_2_2, 0x06170109, 0x04FCFDFD, 0x05050305, 0x0E060002);
	r5 = D(r5, s0_2_2, 0x0C0000EC, 0xF50BFC0F, 0x07080600, 0x04FC0107);
	r6 = D(r6, s0_2_2, 0xFEF60901, 0x02F4FA13, 0x03000503, 0x0B14E70B);
	r7 = D(r7, s0_2_2, 0xF7FC0103, 0x05FFF2F9, 0x15EC03FF, 0x13E1F408);
	r0 = D(r0, s1_0_0, 0x0807F9FF, 0x1AEA071D, 0xFBFE0902, 0xFF04F4FF);
	r1 = D(r1, s1_0_0, 0x140DFFF7, 0x160AF302, 0x06FC0C04, 0xF90802FF);
	r2 = D(r2, s1_0_0, 0x0607FF01, 0x120605F8, 0xFEFCFD04, 0xF3F7FA06);
	r3 = D(r3, s1_0_0, 0xF920FA02, 0xFEFBFB1D, 0x020501F9, 0xFBF6FA09);
	r4 = D(r4, s1_0_0, 0x06F80105, 0xFCFE0300, 0x04FB0500, 0xFFFE03FE);
	r5 = D(r5, s1_0_0, 0x07F10414, 0xEE06F605, 0xFCFDFB07, 0x03FB0306);
	r6 = D(r6, s1_0_0, 0x0A03ED14, 0xFCFCFC01, 0xFFFE0401, 0x0B0B0105);
	r7 = D(r7, s1_0_0, 0x01FCF7FD, 0x050418F7, 0x07F10BFF, 0x0AF9FC08);
	r0 = D(r0, s1_0_1, 0x09F20203, 0xFF221EC3, 0xFEF91202, 0xF51305F4);
	r1 = D(r1, s1_0_1, 0x1209D80D, 0x0FFAF109, 0xF9F90EFA, 0xFAFEEDFF);
	r2 = D(r2, s1_0_1, 0xF401F10C, 0x0FF1071A, 0x050902FE, 0xF4040AE8);
	r3 = D(r3, s1_0_1, 0x0112FAF0, 0xF7ED06FB, 0x0002FD06, 0x11F8F213);
	r4 = D(r4, s1_0_1, 0xFE0CF6FB, 0xFEF70301, 0x040508F9, 0x00FD0303);
	r5 = D(r5, s1_0_1, 0xFDF5FCF7, 0xF90214FC, 0x07FE0601, 0x091500FE);
	r6 = D(r6, s1_0_1, 0x1200F6F8, 0xF70DFCF9, 0xFD0600F9, 0x1506EA00);
	r7 = D(r7, s1_0_1, 0x02FEF405, 0x03FA0E0B, 0xF6FD150E, 0xFC0BFD11);
	r0 = D(r0, s1_0_2, 0xFC0507FC, 0x04F51EFF, 0x05F8F80C, 0x03010300);
	r1 = D(r1, s1_0_2, 0x0F07F200, 0x0405E203, 0xFA010401, 0x0E03FDFF);
	r2 = D(r2, s1_0_2, 0x0B0400F3, 0x0EEB0AFE, 0x030303FF, 0xDF0706F5);
	r3 = D(r3, s1_0_2, 0x1B11F60A, 0x0CF9EF1D, 0x0802FAFF, 0x0B01FE08);
	r4 = D(r4, s1_0_2, 0x0AF4FC03, 0x00FDFA07, 0x00FE0B02, 0xFE0304FF);
	r5 = D(r5, s1_0_2, 0xEEF70A0A, 0xE6000305, 0x1200F504, 0x06FB0802);
	r6 = D(r6, s1_0_2, 0x07FEFAF7, 0xEFF61102, 0x03010801, 0x13020E01);
	r7 = D(r7, s1_0_2, 0x01F90002, 0x090716F8, 0x11F81500, 0xDBF8FAFA);
	r0 = D(r0, s1_1_0, 0x08FDF1F4, 0x0501FCFC, 0x0914F701, 0x0314F5CF);
	r1 = D(r1, s1_1_0, 0x13D2111F, 0x030BF8FF, 0x00F8070F, 0x05201EFF);
	r2 = D(r2, s1_1_0, 0x0FF2FC12, 0x100E03F7, 0x020A01F9, 0x0412F3FE);
	r3 = D(r3, s1_1_0, 0x0E05F60C, 0x0ACD0C16, 0xF6FC020F, 0xFFDCFAF7);
	r4 = D(r4, s1_1_0, 0xFF030203, 0xF90B0AFF, 0x06EAFB0A, 0xF6FB1507);
	r5 = D(r5, s1_1_0, 0xF7FAE317, 0xF312010B, 0x0103FF05, 0x0D13F7FE);
	r6 = D(r6, s1_1_0, 0x232DE313, 0xEAF5FFE8, 0x0101FD07, 0x2025F8F3);
	r7 = D(r7, s1_1_0, 0xF5E3F501, 0xFD050518, 0x02E81601, 0x25E8132C);
	r0 = D(r0, s1_1_1, 0xFAE9F828, 0x11DF24EC, 0x17F2E3EC, 0x1216ECF8);
	r1 = D(r1, s1_1_1, 0xE8811F1C, 0x06D7D012, 0xF60300F5, 0x04F20F2A);
	r2 = D(r2, s1_1_1, 0x04F8F1F4, 0x1ABBE533, 0x05F4EB0A, 0x03E9D614);
	r3 = D(r3, s1_1_1, 0x10EEEA1B, 0x2215810C, 0x02EAF618, 0xFCCBFD39);
	r4 = D(r4, s1_1_1, 0xFD1D1016, 0xF1F911F2, 0x02FE120A, 0xFFFA0E07);
	r5 = D(r5, s1_1_1, 0x12EAE411, 0xE804E907, 0xF214F600, 0x102803EC);
	r6 = D(r6, s1_1_1, 0x142BD3F3, 0xF7150DFB, 0x0F11F8FC, 0x1C42C402);
	r7 = D(r7, s1_1_1, 0x0CF0F20F, 0xF0E907F8, 0xFCDDF400, 0xFDD5EB0A);
	r0 = D(r0, s1_1_2, 0xECFA08FA, 0x34322AE6, 0x06FFF9FE, 0x01F6FC08);
	r1 = D(r1, s1_1_2, 0x0CEAFAFB, 0x110B0E13, 0xF8FD0DFD, 0x17FFFF03);
	r2 = D(r2, s1_1_2, 0x0511C8F9, 0x26FCC602, 0x0702FB00, 0x05FE08F7);
	r3 = D(r3, s1_1_2, 0xF4EAF503, 0x10FE12F3, 0xFBFFFF06, 0x08FDF206);
	r4 = D(r4, s1_1_2, 0x0A10FB01, 0xFB00030A, 0x0202FCFA, 0x02F9F401);
	r5 = D(r5, s1_1_2, 0xFFEB04FE, 0xE1FFEA00, 0x10F8F61B, 0x03FFFF0B);
	r6 = D(r6, s1_1_2, 0xFC0EFEDD, 0xFBFFFCFE, 0xFF020400, 0x07FEF800);
	r7 = D(r7, s1_1_2, 0xFF03FEFF, 0xF9FE0F05, 0x1904E30F, 0xE1F7EE08);
	r0 = D(r0, s1_2_0, 0xF00103EB, 0x02EDE72D, 0x10FEE912, 0x040DFF1C);
	r1 = D(r1, s1_2_0, 0x1921D0E4, 0xF8D4E112, 0x04EE010A, 0x07FFF8F5);
	r2 = D(r2, s1_2_0, 0x07F002ED, 0x0E080314, 0x00FB03F5, 0x0EF0F60B);
	r3 = D(r3, s1_2_0, 0x2D02F21E, 0x0745F3D5, 0xFB100205, 0xF0F40009);
	r4 = D(r4, s1_2_0, 0x04FFF4FB, 0xFB03000A, 0x07F0FC0A, 0xE9150CD7);
	r5 = D(r5, s1_2_0, 0xF4FCF723, 0x03FC0613, 0xF4FBDCFC, 0x0AE9FC18);
	r6 = D(r6, s1_2_0, 0x0708F90A, 0xF7F9EFED, 0x000405EC, 0x15FE03AA);
	r7 = D(r7, s1_2_0, 0xFB0F140A, 0x010E0E08, 0x18FF0DEB, 0x17D9FCE6);
	r0 = D(r0, s1_2_1, 0xFBF60815, 0x0DEFED10, 0x0810E814, 0xF2F3F704);
	r1 = D(r1, s1_2_1, 0x100D0706, 0xF016C720, 0xFFF610FF, 0x0B07F000);
	r2 = D(r2, s1_2_1, 0x09CBE717, 0x11F5013C, 0xFB08FE0A, 0x0501E50C);
	r3 = D(r3, s1_2_1, 0x20A21B21, 0x24EC27EC, 0x00020601, 0x00CB05E1);
	r4 = D(r4, s1_2_1, 0x06EF0CE6, 0xF6080501, 0x06F9F911, 0xEE2A09DE);
	r5 = D(r5, s1_2_1, 0xF515E1E7, 0xEBF4FE0B, 0x03EF0224, 0x08FAF3FC);
	r6 = D(r6, s1_2_1, 0x13F5FAEA, 0x07E40717, 0x00FB00F9, 0x251EDE11);
	r7 = D(r7, s1_2_1, 0xF7060AFF, 0x03FF16F9, 0x00EFF405, 0x011EFC12);
	r0 = D(r0, s1_2_2, 0xFD041010, 0x04F2021B, 0x06EF1220, 0xFEF40007);
	r1 = D(r1, s1_2_2, 0xFF04F6FF, 0x0A0CF509, 0xFCF80EFC, 0xFE000407);
	r2 = D(r2, s1_2_2, 0xFC1190E4, 0x22F21416, 0x0406020B, 0x11060D04);
	r3 = D(r3, s1_2_2, 0x10E70711, 0x351DF881, 0x00FB07F9, 0x1D13F704);
	r4 = D(r4, s1_2_2, 0x03EAF7FD, 0xFAFF010D, 0xFF010002, 0x04030504);
	r5 = D(r5, s1_2_2, 0xFE21F6FD, 0xF50DF8FF, 0x0EF00004, 0x090D0700);
	r6 = D(r6, s1_2_2, 0xFE0701F8, 0x0EEDFE07, 0x04000AF5, 0x240CF1FD);
	r7 = D(r7, s1_2_2, 0x0D0AFF04, 0x0B02FEFD, 0xF8190A05, 0x1D201C0D);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x0F09FBF9, 0x24F6FA06, 0x0114EF03, 0xFFFD06FC);
	r1 = D(r1, s0_0_0, 0xEA038103, 0xF614160A, 0xF311FD06, 0x0D0ED000);
	r2 = D(r2, s0_0_0, 0x01F1F904, 0xFDF3F8F0, 0xFB03F5FD, 0x0CFE0B02);
	r3 = D(r3, s0_0_0, 0x2528F80D, 0xB1F91D02, 0xFCF80200, 0x09F4FB03);
	r4 = D(r4, s0_0_0, 0xFF0B09FA, 0xF5FCF602, 0x05060C0A, 0x01F50604);
	r5 = D(r5, s0_0_0, 0xF7F5FEFC, 0xE6FC0801, 0xFB1300FF, 0xFF10F5FF);
	r6 = D(r6, s0_0_0, 0xFDE90603, 0xFA18DE02, 0x01FDFFFE, 0x0704FBFA);
	r7 = D(r7, s0_0_0, 0x01F40FFE, 0x03FEF0FA, 0x02F1E802, 0xFCE6F5F8);
	r0 = D(r0, s0_0_1, 0x0C060306, 0x01F409E2, 0xFCF80B00, 0x1315EFF7);
	r1 = D(r1, s0_0_1, 0xD2E6DA10, 0xE90A15F3, 0xFE11010A, 0xFFF8F50B);
	r2 = D(r2, s0_0_1, 0xFFF71807, 0x06F6EAF4, 0x06FC0BF2, 0x0E0A0FF4);
	r3 = D(r3, s0_0_1, 0x0FE3E401, 0xD907061B, 0xF5F5DD16, 0xF61C0B09);
	r4 = D(r4, s0_0_1, 0x0CE6FDED, 0x05020804, 0x030DF8F8, 0xFDFE0503);
	r5 = D(r5, s0_0_1, 0xEE02F402, 0xACF3E10D, 0x180F15FA, 0x1113FDE4);
	r6 = D(r6, s0_0_1, 0xFBE20DD4, 0x0609D904, 0x040209F4, 0xE6FFF9DE);
	r7 = D(r7, s0_0_1, 0xECFA06F9, 0xFFF30D01, 0x04111CED, 0x06030203);
	r0 = D(r0, s0_0_2, 0x030DFA02, 0x3A1B07A2, 0xFBEBF5FB, 0x0100F9F5);
	r1 = D(r1, s0_0_2, 0xD9E3F5FC, 0x1D07FDE8, 0xFBF70606, 0x00FAFCFD);
	r2 = D(r2, s0_0_2, 0xE6E20BF8, 0xE4FE230C, 0x09FE0002, 0x05F904F6);
	r3 = D(r3, s0_0_2, 0xFBC6E0F9, 0x40D2FEFB, 0x0AFD02F8, 0x1AE7F510);
	r4 = D(r4, s0_0_2, 0x0ADCF8C7, 0x08050200, 0xFEF4ECF3, 0x02EE1100);
	r5 = D(r5, s0_0_2, 0x06050218, 0xE4FD000E, 0xFFEBE800, 0xF704F5F4);
	r6 = D(r6, s0_0_2, 0x0B13FFF1, 0x05FBE6F5, 0xFFFE0503, 0xF9FE05EE);
	r7 = D(r7, s0_0_2, 0xFD03F307, 0xFB070AFA, 0x02E8F6F9, 0xF600F71B);
	r0 = D(r0, s0_1_0, 0x05EFFEFF, 0x12000008, 0xF90DEE07, 0x0DFBFBFE);
	r1 = D(r1, s0_1_0, 0xC1E6BAFA, 0xED19D711, 0xD9069E11, 0x1A20D6FF);
	r2 = D(r2, s0_1_0, 0x05FF2606, 0x010D0600, 0x00FEFE07, 0xF1F5F60B);
	r3 = D(r3, s0_1_0, 0xF40BD6F6, 0xF40804F4, 0x03FAF800, 0xF9E7F0FE);
	r4 = D(r4, s0_1_0, 0xFE0906F8, 0x02010503, 0xFF050407, 0x01F7F006);
	r5 = D(r5, s0_1_0, 0x16070E19, 0xF320FD08, 0xF300EE02, 0x0BFFEDF6);
	r6 = D(r6, s0_1_0, 0xD702DBFC, 0x0AF70600, 0x04FD03FA, 0xEE1B05DE);
	r7 = D(r7, s0_1_0, 0x160B1501, 0x05F60005, 0x0F021CF6, 0xF70500FE);
	r0 = D(r0, s0_1_1, 0xF32703FD, 0x13C1ED12, 0x1AFC0A01, 0xFB03CD0F);
	r1 = D(r1, s0_1_1, 0x04CAD62D, 0xCEEDC223, 0xE1060636, 0xE7D5EA35);
	r2 = D(r2, s0_1_1, 0xDCF4D60C, 0xE208E50E, 0xFD1A1801, 0xDDE90B12);
	r3 = D(r3, s0_1_1, 0xE2E3B111, 0x3D5BD2FD, 0x0509FEEB, 0x0100CA0F);
	r4 = D(r4, s0_1_1, 0x351C09D7, 0x120D2D02, 0xEC0D011B, 0x08FF0F13);
	r5 = D(r5, s0_1_1, 0xEB1CF117, 0x81DFFF24, 0x11F2FBEA, 0x100E15BB);
	r6 = D(r6, s0_1_1, 0xF5F1E7EC, 0x07FCDB01, 0x06FB09E2, 0xFEF7F2AC);
	r7 = D(r7, s0_1_1, 0xF40BADF1, 0x19F87B04, 0xD6D5FE13, 0xD3C90506);
	r0 = D(r0, s0_1_2, 0xFCEF0621, 0x01F1E804, 0xFC07EF2A, 0x03FCF711);
	r1 = D(r1, s0_1_2, 0xC5D2E624, 0xEEE61948, 0xEDFCFE0E, 0x09010804);
	r2 = D(r2, s0_1_2, 0xD5EC9B06, 0x0704BFCB, 0x04000DF8, 0xEC03FE10);
	r3 = D(r3, s0_1_2, 0xECD82421, 0xF7C614EA, 0x03FEFA0E, 0xE5CE072B);
	r4 = D(r4, s0_1_2, 0x1513FAD6, 0x080001E5, 0xFAF7EFFC, 0xFAF91206);
	r5 = D(r5, s0_1_2, 0x1BFDF6FE, 0xFD130B0E, 0x0BEF1422, 0x1118FECF);
	r6 = D(r6, s0_1_2, 0x1FF7FCEC, 0x03F80C0F, 0xFC070B0B, 0x0B07E6BA);
	r7 = D(r7, s0_1_2, 0x040CFAF1, 0xFAFD27F0, 0xED0EED0C, 0xF60FF514);
	r0 = D(r0, s0_2_0, 0x0DF9F703, 0xF20B0507, 0x0C071809, 0x07090F09);
	r1 = D(r1, s0_2_0, 0xE6338303, 0x3B17F4E7, 0xEB170501, 0x120B07EF);
	r2 = D(r2, s0_2_0, 0x0AFF1003, 0x05FAEEFF, 0x0201FC05, 0x0B0EF703);
	r3 = D(r3, s0_2_0, 0xE111120B, 0xF6F8E318, 0x00F6FF03, 0xF1F2010F);
	r4 = D(r4, s0_2_0, 0xF40EFA02, 0x02F801FE, 0xFD04FD0D, 0xF2F4EA01);
	r5 = D(r5, s0_2_0, 0x05EF0501, 0xF107EDF8, 0xFFFCF2FF, 0x0204EE01);
	r6 = D(r6, s0_2_0, 0xF6071007, 0x0D00E5FF, 0x01FFFB03, 0x0F0BFBE7);
	r7 = D(r7, s0_2_0, 0xFBFDFD08, 0x0BF90201, 0xF21107EC, 0x002E0500);
	r0 = D(r0, s0_2_1, 0x011BEB03, 0x03FDF705, 0xFE12E80F, 0xF61B020D);
	r1 = D(r1, s0_2_1, 0xAF16D200, 0xE6ECEC0E, 0xDFF30400, 0xF3FDFFFE);
	r2 = D(r2, s0_2_1, 0xF910E402, 0xF5F0E300, 0x02FAF603, 0x0EFDFAF6);
	r3 = D(r3, s0_2_1, 0xF30D0DC6, 0x23EAC507, 0xFDFFFE03, 0x07F0F610);
	r4 = D(r4, s0_2_1, 0xFFED04F4, 0xFCECFC09, 0xFDFB0807, 0x0DE4F90A);
	r5 = D(r5, s0_2_1, 0x03EAF518, 0xBF0308EB, 0x0307F9F3, 0xF2F7F809);
	r6 = D(r6, s0_2_1, 0xEEF617F2, 0xF90DF20C, 0xFE06FFF8, 0xFAD8F0DC);
	r7 = D(r7, s0_2_1, 0xF40201F3, 0x0DF317FD, 0xF4F2F104, 0xEFF1E505);
	r0 = D(r0, s0_2_2, 0xF9070704, 0x2A06FDF1, 0xF3FC1214, 0xEF0C060D);
	r1 = D(r1, s0_2_2, 0xFFF316F8, 0xDB230A03, 0xFBF9FE05, 0xFA06F9FD);
	r2 = D(r2, s0_2_2, 0x0215BAF5, 0xFFF7EA00, 0x07FF08FD, 0x09010300);
	r3 = D(r3, s0_2_2, 0xF211FDF0, 0xFC270104, 0x00050207, 0x00020909);
	r4 = D(r4, s0_2_2, 0x0A0100FC, 0x0CFBF2F9, 0xFCF804FF, 0x05000B04);
	r5 = D(r5, s0_2_2, 0xFD25FD13, 0xF8F70011, 0xFB0B0A06, 0x00FEE8F9);
	r6 = D(r6, s0_2_2, 0xF0F30403, 0x02102BF5, 0x03FC0104, 0xFAF30B05);
	r7 = D(r7, s0_2_2, 0xF605FE03, 0x06FC1801, 0x2100FFEE, 0x0D230C04);
	r0 = D(r0, s1_0_0, 0x00FFF003, 0x1ABE0E0A, 0xF0FD0E1D, 0xEBD6DF04);
	r1 = D(r1, s1_0_0, 0xF921EC12, 0x04F6F704, 0x05031E01, 0x02FE02F9);
	r2 = D(r2, s1_0_0, 0x0AFA00F9, 0x0B140B02, 0xFC03FD00, 0x0EE6EDF1);
	r3 = D(r3, s1_0_0, 0xF7FCF20D, 0xED0C0508, 0xFF0104FA, 0xF214FA06);
	r4 = D(r4, s1_0_0, 0x04060703, 0xF902F9FF, 0x030E0E0A, 0xFD0AF508);
	r5 = D(r5, s1_0_0, 0xF3E0E9E3, 0xFD0023FE, 0xF31111FE, 0xF5070504);
	r6 = D(r6, s1_0_0, 0x1E0F09FB, 0xC9F70805, 0x02FE0507, 0xEB0EF2F6);
	r7 = D(r7, s1_0_0, 0x01FFF1F7, 0x09FD09F9, 0xF5150FFF, 0xE90A14F5);
	r0 = D(r0, s1_0_1, 0xFAFCFEFD, 0x0FEBA61A, 0x0218FF00, 0xF7F9CF03);
	r1 = D(r1, s1_0_1, 0x200A27F9, 0xEE0CE8D6, 0xF6FDF3FF, 0xF6040C0E);
	r2 = D(r2, s1_0_1, 0x060F1418, 0xFEE3FF0D, 0xFC07D003, 0xEBF69E0D);
	r3 = D(r3, s1_0_1, 0xEE042A0B, 0xE6FDBA03, 0x09F63CF2, 0xEF0D0816);
	r4 = D(r4, s1_0_1, 0xF3071E15, 0xFC04F3FE, 0x0AF6130C, 0x0509FDFC);
	r5 = D(r5, s1_0_1, 0x1102051B, 0xF5090505, 0xEC07FEF8, 0xF4FDD803);
	r6 = D(r6, s1_0_1, 0x1214FDFD, 0xEFDDE410, 0x0202DB00, 0xFF2624E2);
	r7 = D(r7, s1_0_1, 0x08070B0D, 0x0E031204, 0xF5FCE518, 0xEC0FCEEF);
	r0 = D(r0, s1_0_2, 0x0B0BEFFD, 0x450EB7F3, 0x020222EB, 0x040304EF);
	r1 = D(r1, s1_0_2, 0x130B0F15, 0x2DFD10AF, 0x00FA01F7, 0x07F3F5FE);
	r2 = D(r2, s1_0_2, 0x19EE0708, 0x1B02F0F8, 0x04FBFBFC, 0x15FBEE14);
	r3 = D(r3, s1_0_2, 0xFC0B1EF6, 0x17193104, 0xFC001001, 0xFE151AFE);
	r4 = D(r4, s1_0_2, 0xEE1224ED, 0x0CFF01F9, 0xFDFA0702, 0x07010000);
	r5 = D(r5, s1_0_2, 0xF70A0FF4, 0xF302FC1A, 0x0E041FEA, 0xF6FFED09);
	r6 = D(r6, s1_0_2, 0x05F4EE19, 0xF10A14FE, 0x01FF07FE, 0xF512E001);
	r7 = D(r7, s1_0_2, 0x020BFDFC, 0x04F606FC, 0xF2F20005, 0xFE0927D8);
	r0 = D(r0, s1_1_0, 0x16FDF11B, 0x151EF9E8, 0x02F509E3, 0x00F500E2);
	r1 = D(r1, s1_1_0, 0x20D5E5F3, 0x0629EBDD, 0x03130002, 0xFAF7F505);
	r2 = D(r2, s1_1_0, 0xF50904D4, 0xE6F907ED, 0x05FF0907, 0x09080102);
	r3 = D(r3, s1_1_0, 0x0DFC0008, 0x12FBED0B, 0xFBEC04F5, 0xE1F11A0A);
	r4 = D(r4, s1_1_0, 0xF9EEF20A, 0x1108FB04, 0x010D03EB, 0xFC1EE702);
	r5 = D(r5, s1_1_0, 0xF6EFF8F5, 0xED0912F3, 0x08F90807, 0x00010401);
	r6 = D(r6, s1_1_0, 0x071D09EB, 0xF8ED1017, 0xFEF102FA, 0xF83FFB01);
	r7 = D(r7, s1_1_0, 0xE9E50CDA, 0x07F5F8FB, 0xE0EDFD03, 0xF2270DE5);
	r0 = D(r0, s1_1_1, 0xEF0116F5, 0x09E3FC06, 0xD4B6EFF1, 0xD6060202);
	r1 = D(r1, s1_1_1, 0xDBF505F7, 0xE8EEC0FE, 0x01EA07FD, 0xFCFEF4E2);
	r2 = D(r2, s1_1_1, 0xF40BECBE, 0xD1DF00C7, 0x0F08E7FE, 0x0C0DCEEF);
	r3 = D(r3, s1_1_1, 0xF9F709F8, 0xCE1F11D9, 0xFF031D00, 0xE3DB1503);
	r4 = D(r4, s1_1_1, 0xDFE500F4, 0xD4E5F508, 0x2403EF00, 0xFC06C604);
	r5 = D(r5, s1_1_1, 0xF92BFF13, 0xE7F1FA09, 0xF504FC1C, 0x05FC10F2);
	r6 = D(r6, s1_1_1, 0x1AE2F407, 0xFBFB02FE, 0x12212E03, 0x620EFFF3);
	r7 = D(r7, s1_1_1, 0x000C0FF2, 0xE4FAEF0F, 0xED0AD903, 0xD80AB62D);
	r0 = D(r0, s1_1_2, 0xFDF30EFC, 0xE2C301FD, 0x130615FF, 0xF7000A05);
	r1 = D(r1, s1_1_2, 0x1B14ED06, 0x08FA0508, 0xF5F80703, 0xFAF300F7);
	r2 = D(r2, s1_1_2, 0xFFF70205, 0x1810CB17, 0x0200FFFF, 0x080503EC);
	r3 = D(r3, s1_1_2, 0x0900FD26, 0x2EFFCB06, 0x0003FB0A, 0x090A0AED);
	r4 = D(r4, s1_1_2, 0xFFFB0CF8, 0xF1FDF903, 0x14F304F4, 0x1305FAFA);
	r5 = D(r5, s1_1_2, 0x0C1A1301, 0xE9FF0E09, 0x10070AEF, 0x01F80403);
	r6 = D(r6, s1_1_2, 0x01D9E801, 0xE10312EF, 0x0FF7FCFE, 0x0D06FBE5);
	r7 = D(r7, s1_1_2, 0x010704FC, 0x040AFA10, 0xF416FCEE, 0x0F1402DB);
	r0 = D(r0, s1_2_0, 0xFCF7F514, 0x091C09F9, 0x0805FF07, 0xF80BFEF1);
	r1 = D(r1, s1_2_0, 0x0A13F8F4, 0xE2D1F51A, 0xF60003F2, 0xF3FE0DFF);
	r2 = D(r2, s1_2_0, 0x050601FC, 0x0304071A, 0x00040002, 0x0504FCF6);
	r3 = D(r3, s1_2_0, 0x09100B07, 0x200C061B, 0xFFFDFF06, 0xE3EB1CF4);
	r4 = D(r4, s1_2_0, 0x0D0E0405, 0x06FEFE00, 0x051702F8, 0xF0E1F32D);
	r5 = D(r5, s1_2_0, 0x0101F103, 0xF3000BF6, 0x08E9F809, 0x0A0D01FD);
	r6 = D(r6, s1_2_0, 0x0E1A00F9, 0x0AFDF70B, 0xFAFA0306, 0xF6160EF1);
	r7 = D(r7, s1_2_0, 0x050008EE, 0x0B00FE05, 0x03F70B01, 0xA9C31708);
	r0 = D(r0, s1_2_1, 0xFD0EF8F5, 0x0F1806F6, 0x141E03F0, 0xFC1F08F5);
	r1 = D(r1, s1_2_1, 0x03F21C0C, 0x2627EBF6, 0xFB090909, 0xF90105FF);
	r2 = D(r2, s1_2_1, 0x0C15F21D, 0xEF1315EB, 0x0703F9FB, 0xFBF9FFFE);
	r3 = D(r3, s1_2_1, 0x05F6F50F, 0x06FF1A2C, 0x0A05FF07, 0xD0110729);
	r4 = D(r4, s1_2_1, 0x060B090B, 0x1010FA06, 0x020605FA, 0xFAE6ED07);
	r5 = D(r5, s1_2_1, 0x10DFF6ED, 0xF60708FE, 0x1015FAF8, 0xFB0307FF);
	r6 = D(r6, s1_2_1, 0x060101F2, 0xFF1A10EB, 0xF6F50506, 0xDE1C0B0C);
	r7 = D(r7, s1_2_1, 0xFCFFFB00, 0x03E7FB1D, 0x120DFC15, 0x81EBF911);
	r0 = D(r0, s1_2_2, 0x061BFF09, 0x0C2004FE, 0xFD2104E4, 0xF61408F9);
	r1 = D(r1, s1_2_2, 0x0A0EEE1D, 0x231C0DEB, 0xFBF801FE, 0x0AFEFBF8);
	r2 = D(r2, s1_2_2, 0x1EE1F10B, 0x1418F9DC, 0x020502F6, 0xFF0A02FE);
	r3 = D(r3, s1_2_2, 0x05EF0415, 0x2DCEE34E, 0x010602F8, 0xE40309F6);
	r4 = D(r4, s1_2_2, 0xF8F1FD08, 0x0105FEF8, 0xFCF50401, 0xF700FF05);
	r5 = D(r5, s1_2_2, 0xF7EA0A06, 0xECF20CF8, 0x031202F6, 0xF9FAF7FD);
	r6 = D(r6, s1_2_2, 0xFDDDFC01, 0xF1190A00, 0xFAFCFF06, 0x140DECF7);
	r7 = D(r7, s1_2_2, 0x020903FB, 0x01FDF901, 0xF0F1FD08, 0xC402010B);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x05F2FC0A, 0x04CD08F8, 0x0A10FED3, 0x12EF03F0);
	r1 = D(r1, s0_0_0, 0xE2D9FF1D, 0xF8FE031B, 0xF104FF12, 0x0107FDFE);
	r2 = D(r2, s0_0_0, 0xEBFB00FA, 0xF5E5F4E6, 0x03FD05E4, 0x14FD13D8);
	r3 = D(r3, s0_0_0, 0x0910FC18, 0xE600F9BF, 0xF502F507, 0x000AFC13);
	r4 = D(r4, s0_0_0, 0x0AF9FDE4, 0x02FE01ED, 0x02FAFD06, 0xFFF8FC04);
	r5 = D(r5, s0_0_0, 0xFE0A03F5, 0xF70004F3, 0x0F0709FC, 0x0EF902E7);
	r6 = D(r6, s0_0_0, 0xF8070722, 0xFAFB030E, 0x03FD0301, 0xFDFC062C);
	r7 = D(r7, s0_0_0, 0x04F5ECF9, 0xF9FAF106, 0xF10002DB, 0x07E426FB);
	r0 = D(r0, s0_0_1, 0xFD09FEF7, 0x2D10FBE7, 0x082D06EB, 0xFE21010E);
	r1 = D(r1, s0_0_1, 0x0421F202, 0x2310F301, 0x08FC0403, 0xFE08F40C);
	r2 = D(r2, s0_0_1, 0x0407FF04, 0x0B0303EA, 0xFE0B0200, 0x0C0CF8F6);
	r3 = D(r3, s0_0_1, 0xE418FA05, 0x3E0FFC01, 0xFD0300FB, 0x10FF02FB);
	r4 = D(r4, s0_0_1, 0x06090100, 0xFD0705FF, 0x04010200, 0x0FF5FF06);
	r5 = D(r5, s0_0_1, 0x01EB0DF7, 0x0CF0F6E6, 0xF7040C08, 0x0606FC0A);
	r6 = D(r6, s0_0_1, 0x160AFB1B, 0x0D16050D, 0x0205FF0A, 0xF2EDFCFE);
	r7 = D(r7, s0_0_1, 0x050300FB, 0x08FC0406, 0xF8E9EDEA, 0x02EDF3F6);
	r0 = D(r0, s0_0_2, 0xFD0201F2, 0xDC05E820, 0x0B0103F5, 0x0C09ECFD);
	r1 = D(r1, s0_0_2, 0x03FFFF09, 0x0F13010D, 0xFEFBED05, 0x02060700);
	r2 = D(r2, s0_0_2, 0x09FB0324, 0xFD030705, 0x0504FD03, 0x0916E10B);
	r3 = D(r3, s0_0_2, 0x050612FC, 0x1ADE120D, 0x03F70AFB, 0x0A05F407);
	r4 = D(r4, s0_0_2, 0x0BEC12FE, 0xFC00FEFD, 0x0402FEFE, 0x00FB0102);
	r5 = D(r5, s0_0_2, 0x01FC0807, 0x030315F8, 0x0BFDFEFF, 0x06FCF9FA);
	r6 = D(r6, s0_0_2, 0x0CFA0307, 0xFD06F5FD, 0x00030003, 0x0E030EFC);
	r7 = D(r7, s0_0_2, 0x030A0507, 0x05F3FB02, 0x02FB0706, 0x0F1FEE18);
	r0 = D(r0, s0_1_0, 0x06080CF6, 0xFBF7F20A, 0x050114E6, 0xF303F40C);
	r1 = D(r1, s0_1_0, 0x00FD16BF, 0xEE20F6FB, 0xF912090D, 0xF90307F2);
	r2 = D(r2, s0_1_0, 0xE7E4059D, 0xE7E929C3, 0x0001ED01, 0xF706E8FE);
	r3 = D(r3, s0_1_0, 0xE4FFE10E, 0x01CC070E, 0x10FF0D04, 0x02D3EC02);
	r4 = D(r4, s0_1_0, 0x04021704, 0x0400FCFB, 0xF3F7FFF8, 0x0406FEF2);
	r5 = D(r5, s0_1_0, 0xFEFEF1FB, 0x0602F0F6, 0x060CF717, 0xF4F8FC02);
	r6 = D(r6, s0_1_0, 0xE4E81CFA, 0x0C06EA26, 0x01F80409, 0xE21DEE0D);
	r7 = D(r7, s0_1_0, 0xFBE4E6E9, 0x0807FC18, 0xF7E7FEFD, 0xDA05C101);
	r0 = D(r0, s0_1_1, 0x091303FD, 0x061015E6, 0x080329FB, 0xF2FA0702);
	r1 = D(r1, s0_1_1, 0xCC17EBEC, 0xD2F72EF0, 0xF702061E, 0x04EDEAEC);
	r2 = D(r2, s0_1_1, 0xF528F181, 0xF64525E1, 0xF7FC0CE9, 0xF6F40ACC);
	r3 = D(r3, s0_1_1, 0x0FEEE312, 0x03C6EF65, 0xF708F516, 0x050E04FA);
	r4 = D(r4, s0_1_1, 0x090712F5, 0x05F20DF7, 0xF302080C, 0xFEFDF511);
	r5 = D(r5, s0_1_1, 0x041F1B03, 0x13F4EBFA, 0xF80EFB1F, 0x0D090004);
	r6 = D(r6, s0_1_1, 0x23070503, 0xFEFCF8F2, 0xFC06F80E, 0x1EC6D8C4);
	r7 = D(r7, s0_1_1, 0xF7FEFCEB, 0xF3FBFF28, 0xEE1428EA, 0xD0FC2BC9);
	r0 = D(r0, s0_1_2, 0xF90605F7, 0xF8E8F9FF, 0x070EEE0A, 0x06FE09F9);
	r1 = D(r1, s0_1_2, 0x03DCF0F6, 0xF100AEFB, 0xFD0BF8F9, 0x03000D00);
	r2 = D(r2, s0_1_2, 0x1BEB0AF8, 0xF40C18F1, 0x06FC0700, 0x16F72A09);
	r3 = D(r3, s0_1_2, 0xDA09EC1B, 0x90350A01, 0xFD00FCF8, 0xE8FAFB02);
	r4 = D(r4, s0_1_2, 0x03F8F80C, 0x0400FE01, 0x0AFAF0FD, 0xFAF6F9F0);
	r5 = D(r5, s0_1_2, 0x0505FD02, 0x080D00F5, 0xECFEDCF6, 0x0C011101);
	r6 = D(r6, s0_1_2, 0x1F1BEA06, 0xF60BFB14, 0xFB05FA02, 0x13F811EF);
	r7 = D(r7, s0_1_2, 0x03F9010F, 0xFBF104FB, 0x12EC1101, 0x09020AEF);
	r0 = D(r0, s0_2_0, 0x060EFFFE, 0x09FC0C00, 0xFD0DF107, 0xFF0C08F1);
	r1 = D(r1, s0_2_0, 0xF1FB06D5, 0x0DE61DFF, 0xFCF713FA, 0x0C0107F7);
	r2 = D(r2, s0_2_0, 0xFEEFFB1F, 0xF1F5BB17, 0x05000802, 0x00FA140E);
	r3 = D(r3, s0_2_0, 0x1B0618EA, 0x220BDBF5, 0xFC03F201, 0xFC18E008);
	r4 = D(r4, s0_2_0, 0xF70BDBFD, 0xFFFBFDFF, 0x01F800FC, 0x01051704);
	r5 = D(r5, s0_2_0, 0x21EF190F, 0xF1E80E11, 0x0C0B1406, 0xF8FB05FC);
	r6 = D(r6, s0_2_0, 0x07F506FD, 0xFD1BFA04, 0xFE02FE03, 0xECF730E2);
	r7 = D(r7, s0_2_0, 0x0100DA00, 0xFEF9F7FE, 0xFFFFF8E8, 0x15EA0C0F);
	r0 = D(r0, s0_2_1, 0xF306FB11, 0xF709DBF2, 0xF00B1209, 0xEF0A0C12);
	r1 = D(r1, s0_2_1, 0x18ED13FD, 0x04EEE6F1, 0xF106030C, 0x0004F1EE);
	r2 = D(r2, s0_2_1, 0xFE000EE0, 0xFDF6F8F1, 0x0500FFF6, 0x06F404FD);
	r3 = D(r3, s0_2_1, 0xF2081518, 0xD415F619, 0x080410FC, 0xF00630F0);
	r4 = D(r4, s0_2_1, 0xEEF70809, 0xF704FBFD, 0x0004060C, 0x18EBF7F9);
	r5 = D(r5, s0_2_1, 0x0FFDF410, 0xF7031A18, 0x030514FF, 0x0907E7EE);
	r6 = D(r6, s0_2_1, 0x03F6F809, 0xFC0004F7, 0x00000006, 0xFDE6C7F8);
	r7 = D(r7, s0_2_1, 0x03090DF9, 0x11FC0CF9, 0x12F005FC, 0x0CEE0E08);
	r0 = D(r0, s0_2_2, 0xEDFBF2FC, 0xE1111BF9, 0xED1401EF, 0xEC04FAFF);
	r1 = D(r1, s0_2_2, 0xF9E40116, 0xEF085DE6, 0x1101E3EF, 0xFBFDFA0F);
	r2 = D(r2, s0_2_2, 0x06EC271C, 0xA50B0F22, 0xF8FBF606, 0xFBFFF50A);
	r3 = D(r3, s0_2_2, 0xFFE02FD5, 0x3AE804B9, 0x07FD07FA, 0x00FDDDFE);
	r4 = D(r4, s0_2_2, 0x0509EDF5, 0x01F9FD09, 0xFD01FDFB, 0x0407FE01);
	r5 = D(r5, s0_2_2, 0x0B1212F9, 0x050716F9, 0xFCFC03EE, 0x04FF0C11);
	r6 = D(r6, s0_2_2, 0x100E03F4, 0xE2070D09, 0x03010301, 0xD9FEEC17);
	r7 = D(r7, s0_2_2, 0xEE00070C, 0x1501FEF6, 0xD2FEDD2F, 0xE803D50B);
	r0 = D(r0, s1_0_0, 0x02FEFA0D, 0x08F1FAF5, 0x01001506, 0x0DF705FD);
	r1 = D(r1, s1_0_0, 0xFB0A1EEC, 0x16030BE0, 0x04050005, 0xF5F0F403);
	r2 = D(r2, s1_0_0, 0xFCFF0FF1, 0xF1F8F5F3, 0x00FFFC0B, 0x0BF8F7FD);
	r3 = D(r3, s1_0_0, 0x11F9F4EA, 0x00F7FD2B, 0x000401F1, 0x0CFD0804);
	r4 = D(r4, s1_0_0, 0x01FCFF07, 0xFDFBFB02, 0x05FFFDFE, 0x020505FC);
	r5 = D(r5, s1_0_0, 0x07FC0CF2, 0xF6FDFE0F, 0xFCFEF207, 0x02FEF214);
	r6 = D(r6, s1_0_0, 0x08FDFFF8, 0xFAF2F618, 0x03FE0006, 0x0CFC110A);
	r7 = D(r7, s1_0_0, 0x030800F0, 0x060203F3, 0xF9FAEF0D, 0x10EDEA16);
	r0 = D(r0, s1_0_1, 0xFEF8FD02, 0xD8DCEA37, 0xEEFA060C, 0x07EFFC00);
	r1 = D(r1, s1_0_1, 0xE213E9F3, 0xFD0311EF, 0x000AFFE1, 0x08140300);
	r2 = D(r2, s1_0_1, 0xFF0408FE, 0x11F6EDED, 0x00FCFCF8, 0x14D8FEB9);
	r3 = D(r3, s1_0_1, 0x13E7E529, 0x1011B8CD, 0xF904FF06, 0x0AF401E3);
	r4 = D(r4, s1_0_1, 0x09F6E521, 0xFC05F3F7, 0xFCFEF512, 0x010B08F6);
	r5 = D(r5, s1_0_1, 0xEDEA0B0C, 0xF30EF5F7, 0x0400E900, 0xFBF4ED12);
	r6 = D(r6, s1_0_1, 0x08E40B09, 0x02F5F50D, 0x01FE0201, 0x0606240C);
	r7 = D(r7, s1_0_1, 0xFA011005, 0xFE0C0807, 0x022B09DC, 0xFD4005D2);
	r0 = D(r0, s1_0_2, 0xFB0BEDFF, 0xF3161B00, 0xFAFD0CFA, 0xF6F8FD06);
	r1 = D(r1, s1_0_2, 0xFD090AFC, 0xE0C2E532, 0x02F9FA09, 0x03020CFE);
	r2 = D(r2, s1_0_2, 0xFFF902F5, 0xECDC02E2, 0xF9F90008, 0xF0ADFEF8);
	r3 = D(r3, s1_0_2, 0x0C31F4FF, 0x00E3EA1D, 0x0B10FDF4, 0xFB0F0EFE);
	r4 = D(r4, s1_0_2, 0x121DFFFF, 0xF7F9F901, 0x0703FA05, 0xFEFF0506);
	r5 = D(r5, s1_0_2, 0xFFF7F7F9, 0xFCF907F7, 0x0407F905, 0x04140701);
	r6 = D(r6, s1_0_2, 0xF9FAFC10, 0xFC04F6FF, 0xFE00FEFF, 0x011F1005);
	r7 = D(r7, s1_0_2, 0xFE0304F6, 0x0300060B, 0x05DC0503, 0xF2CB03F7);
	r0 = D(r0, s1_1_0, 0x01F8FDFD, 0x1CF8050C, 0x0404FC0E, 0x0D050400);
	r1 = D(r1, s1_1_0, 0xE4F8E9DE, 0x0F05FADE, 0xFD0400EA, 0xFAF8FE01);
	r2 = D(r2, s1_1_0, 0x110703EF, 0x08000712, 0xFE00FE00, 0xFFFDF8EE);
	r3 = D(r3, s1_1_0, 0xF700F60D, 0x1BEBE5F8, 0x0604F113, 0xEBF6F516);
	r4 = D(r4, s1_1_0, 0xF7FE0207, 0x04020104, 0x0605FBF8, 0xF4F9F9EB);
	r5 = D(r5, s1_1_0, 0x1603F4FC, 0xE90F0BFD, 0x0CFB11FC, 0x09020305);
	r6 = D(r6, s1_1_0, 0x330B0205, 0xFE03F602, 0xF401FC0A, 0xF0F837E4);
	r7 = D(r7, s1_1_0, 0xEB02FD10, 0xFA0C01F7, 0xF60C0209, 0xD9101D01);
	r0 = D(r0, s1_1_1, 0xE60FE4E3, 0x1F08F0F2, 0x050D0CC8, 0x1503F611);
	r1 = D(r1, s1_1_1, 0xE8F8FF18, 0xFC0AF9A4, 0x0707FEF0, 0x0D1511FC);
	r2 = D(r2, s1_1_1, 0xE0050512, 0x1BFF1AC4, 0x210AFFFC, 0x3E07D4E3);
	r3 = D(r3, s1_1_1, 0xF7FD17C5, 0x1BE50B81, 0xDDF41007, 0x03030EEE);
	r4 = D(r4, s1_1_1, 0xEF010912, 0xEA0BEA01, 0xF110FBF0, 0xFE001501);
	r5 = D(r5, s1_1_1, 0xF1EEFAFC, 0xDD14E5EC, 0x0B04E1EC, 0x05030A08);
	r6 = D(r6, s1_1_1, 0x1D19E3F7, 0xEC06F9F7, 0x3BF409FC, 0x19150532);
	r7 = D(r7, s1_1_1, 0xF7FFEE0D, 0xFAF30403, 0xEFFFFE27, 0x10E70E07);
	r0 = D(r0, s1_1_2, 0xF710F4FD, 0x27310BF0, 0xEFF5F206, 0xFB33FDFC);
	r1 = D(r1, s1_1_2, 0x1CDBE615, 0xE7D51601, 0x08FEFD04, 0x0AED03F3);
	r2 = D(r2, s1_1_2, 0x100B0307, 0xE20607EB, 0xFF0400FC, 0x02FBEFF8);
	r3 = D(r3, s1_1_2, 0xDDD40A03, 0xDABACF27, 0x0A080AFD, 0x04040113);
	r4 = D(r4, s1_1_2, 0xEF12FD02, 0x0204FFFB, 0xFFFAF606, 0xFEF7040B);
	r5 = D(r5, s1_1_2, 0xE2F20A06, 0xF5EA120F, 0xFD1206ED, 0x141004F8);
	r6 = D(r6, s1_1_2, 0x000A0C0B, 0xFD2B04F1, 0xF3020803, 0x130812FB);
	r7 = D(r7, s1_1_2, 0x02FE0700, 0x031110FE, 0x05F80707, 0xD3E804F9);
	r0 = D(r0, s1_2_0, 0x15FEF5F8, 0x0A060600, 0xF90A0801, 0x06030309);
	r1 = D(r1, s1_2_0, 0x12F900FC, 0x300900F3, 0x1C0401F8, 0xEB070C16);
	r2 = D(r2, s1_2_0, 0x0102F9EA, 0xFAF50CEC, 0x04030100, 0x1706040A);
	r3 = D(r3, s1_2_0, 0xF9081DFA, 0xE00710F7, 0xF4F4FFFD, 0xD3F7FD00);
	r4 = D(r4, s1_2_0, 0xF4FF0204, 0x05FD0402, 0x1004FEFC, 0x3207F7DA);
	r5 = D(r5, s1_2_0, 0x010712F4, 0x0A07F914, 0x03F600FF, 0xFE030406);
	r6 = D(r6, s1_2_0, 0x18FAFFEF, 0x00040DF0, 0xFAFCFD03, 0x0CFD1219);
	r7 = D(r7, s1_2_0, 0xECFEFD05, 0xFE01F708, 0xEF0E1201, 0x0204170D);
	r0 = D(r0, s1_2_1, 0x0203F5F4, 0x0B0C12F5, 0xF0F408FD, 0xF9091101);
	r1 = D(r1, s1_2_1, 0x23EFF11B, 0x03FA1FFF, 0xEDFCFC03, 0x0A0F030B);
	r2 = D(r2, s1_2_1, 0x0B001512, 0x1300F5F2, 0x140B0500, 0x1B0D0C02);
	r3 = D(r3, s1_2_1, 0x0907FBFC, 0xD41FCAE5, 0xF1EFFEFA, 0x00F7E706);
	r4 = D(r4, s1_2_1, 0xE7000F08, 0x06F2F607, 0x0707FDF8, 0x250BEE00);
	r5 = D(r5, s1_2_1, 0xFB1FF5EF, 0xD0F802FD, 0xF0FB0606, 0x03070DFB);
	r6 = D(r6, s1_2_1, 0x11F701F4, 0x16020B08, 0xEE0807FD, 0x0D0717FB);
	r7 = D(r7, s1_2_1, 0x0A00FAF7, 0xF4FDF9FA, 0x00F20BF6, 0x031B08FA);
	r0 = D(r0, s1_2_2, 0xFC00F90C, 0x08F007F9, 0xFC1B040D, 0xFA090202);
	r1 = D(r1, s1_2_2, 0xFC010FF9, 0xEDD61103, 0x0A09FAFF, 0xFD040305);
	r2 = D(r2, s1_2_2, 0x0CF0D3FA, 0xFBFE08FB, 0x01FB0104, 0x030FFE02);
	r3 = D(r3, s1_2_2, 0x14EBF811, 0xEB2E0000, 0x04F404FC, 0x09101405);
	r4 = D(r4, s1_2_2, 0x08FA04FB, 0xFCFFFC04, 0xFA05FD02, 0x0AFAFDF8);
	r5 = D(r5, s1_2_2, 0xF008040D, 0xEBFF0201, 0x01160D01, 0x010601FF);
	r6 = D(r6, s1_2_2, 0x150EEB02, 0xF6FB0DFB, 0x0400FFFC, 0xFCFC140C);
	r7 = D(r7, s1_2_2, 0xFFEAFDFD, 0x06F80000, 0xF4F304FD, 0xDB0F0B12);
	s0_0_0 = G[6][xy.y+0][xy.x+0]; s0_0_1 = G[6][xy.y+0][xy.x+1];
	s0_0_2 = G[6][xy.y+0][xy.x+2]; s0_1_0 = G[6][xy.y+1][xy.x+0];
	s0_1_1 = G[6][xy.y+1][xy.x+1]; s0_1_2 = G[6][xy.y+1][xy.x+2];
	s0_2_0 = G[6][xy.y+2][xy.x+0]; s0_2_1 = G[6][xy.y+2][xy.x+1];
	s0_2_2 = G[6][xy.y+2][xy.x+2]; s1_0_0 = G[7][xy.y+0][xy.x+0];
	s1_0_1 = G[7][xy.y+0][xy.x+1]; s1_0_2 = G[7][xy.y+0][xy.x+2];
	s1_1_0 = G[7][xy.y+1][xy.x+0]; s1_1_1 = G[7][xy.y+1][xy.x+1];
	s1_1_2 = G[7][xy.y+1][xy.x+2]; s1_2_0 = G[7][xy.y+2][xy.x+0];
	s1_2_1 = G[7][xy.y+2][xy.x+1]; s1_2_2 = G[7][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x0EFCF405, 0xF8EC01F2, 0xFA8E0C09, 0x0203E2F2);
	r1 = D(r1, s0_0_0, 0x0203FBFD, 0x02060728, 0xF9F00C0A, 0x0008EBDF);
	r2 = D(r2, s0_0_0, 0xFEFBF60D, 0x12ED0414, 0xFEFEFAFB, 0xF8FEF3FD);
	r3 = D(r3, s0_0_0, 0x0C08F7E3, 0xFD041914, 0x0AFB0709, 0xFE1004F2);
	r4 = D(r4, s0_0_0, 0x1006FB04, 0x02F70B02, 0xFF05F5F6, 0xFD030203);
	r5 = D(r5, s0_0_0, 0x00F3E80C, 0xEA081C21, 0x090910EC, 0x0904FD0C);
	r6 = D(r6, s0_0_0, 0x1603F229, 0x05F61506, 0xFDFDFD05, 0x03F11309);
	r7 = D(r7, s0_0_0, 0xFB0AF9FD, 0x03FA0509, 0x07EE1701, 0x1AED1CD5);
	r0 = D(r0, s0_0_1, 0xF6FBF8F6, 0x4ACF0C31, 0x0481D8EB, 0xF8E000F6);
	r1 = D(r1, s0_0_1, 0xF10EDBFB, 0x0500D919, 0x12F4F602, 0x04050719);
	r2 = D(r2, s0_0_1, 0xF410F603, 0x0DEFF014, 0x0708FD03, 0x0023F807);
	r3 = D(r3, s0_0_1, 0xF7020202, 0x08ED0E04, 0xECF90AFD, 0x0312F304);
	r4 = D(r4, s0_0_1, 0x13EDF8EC, 0x07050302, 0x04FD02F2, 0x0106FC04);
	r5 = D(r5, s0_0_1, 0xF2F600F8, 0xD50B0522, 0x11F9010B, 0x18F008ED);
	r6 = D(r6, s0_0_1, 0x07FA0101, 0xF3FC12DB, 0xFC070502, 0x0DFA1B05);
	r7 = D(r7, s0_0_1, 0xF308E103, 0x0500F60E, 0x0711FB12, 0x100BDB18);
	r0 = D(r0, s0_0_2, 0xFEFDFAFB, 0x0AC7FDDA, 0xF0BB07C5, 0xFCF101F6);
	r1 = D(r1, s0_0_2, 0x07FDD310, 0xF30603DD, 0xF80211F5, 0xFB02F903);
	r2 = D(r2, s0_0_2, 0x0011E41D, 0xF9F4E3FE, 0xFAFD09F7, 0xF21433FF);
	r3 = D(r3, s0_0_2, 0x05F4D814, 0x0AA6ECF3, 0x0AFBE6FE, 0x1800F104);
	r4 = D(r4, s0_0_2, 0xFAEEF2F3, 0x04060904, 0xFDF601F6, 0xF906FBF8);
	r5 = D(r5, s0_0_2, 0x01FFF908, 0xD6190517, 0x03F00AFB, 0xFB050D15);
	r6 = D(r6, s0_0_2, 0xFFF60FEC, 0xF40708DF, 0xFD010904, 0x09F6F908);
	r7 = D(r7, s0_0_2, 0x09FB00FB, 0xF9FD0006, 0xFBFE04F0, 0x05FF23D2);
	r0 = D(r0, s0_1_0, 0x11EEEF02, 0x01ED06D5, 0x0ADB0711, 0x011EF2D8);
	r1 = D(r1, s0_1_0, 0x0AE6070E, 0x13BE2BD9, 0xDAE317FC, 0xE5FC1206);
	r2 = D(r2, s0_1_0, 0xFF0A16E8, 0x12FAFB00, 0xF9FFFFF3, 0xFCFF2209);
	r3 = D(r3, s0_1_0, 0x090120F9, 0xF1E9E2E3, 0xFE02F5F7, 0xFD09E8E1);
	r4 = D(r4, s0_1_0, 0xFE10F6EA, 0xFD06020D, 0x040205FC, 0x0EF3F708);
	r5 = D(r5, s0_1_0, 0x0DF1F404, 0xF2091910, 0x03F90D0A, 0x2400EE23);
	r6 = D(r6, s0_1_0, 0x1B082BFA, 0xF301F902, 0xF613F5F3, 0x18EB2C32);
	r7 = D(r7, s0_1_0, 0x0B0EEDE0, 0xF5FDFE06, 0xFF0606DC, 0xFFF60181);
	r0 = D(r0, s0_1_1, 0x330D03FA, 0xFBE9CD08, 0x14F3D4E9, 0xF9D9E5AE);
	r1 = D(r1, s0_1_1, 0x14E9B30C, 0xECFBE9F5, 0x28EE18F8, 0x3502FA22);
	r2 = D(r2, s0_1_1, 0xEF08350E, 0x0BF9D6B7, 0x0625FCF6, 0xE6462701);
	r3 = D(r3, s0_1_1, 0xE1F8160C, 0xF821CAFE, 0x3EF1E7FE, 0x04F1DC28);
	r4 = D(r4, s0_1_1, 0x2F10CB03, 0x32F502FB, 0x45EF090B, 0x140B0A14);
	r5 = D(r5, s0_1_1, 0xD6C1EC1A, 0xD8FD222A, 0x08F207FE, 0xDCCBFF12);
	r6 = D(r6, s0_1_1, 0xE8ED13F4, 0x1813FAF0, 0xF0FFFCFD, 0xC8B43901);
	r7 = D(r7, s0_1_1, 0xDF19CC0C, 0x22FD0107, 0x0A14DDCE, 0xE4FC26AF);
	r0 = D(r0, s0_1_2, 0x12150BEE, 0xE1DEEBF7, 0xBBFD07EE, 0xE901DFF9);
	r1 = D(r1, s0_1_2, 0xF40BE33D, 0x05DADB16, 0xFBF11FF4, 0xF415ED0B);
	r2 = D(r2, s0_1_2, 0xD4EDD1FC, 0xEF07CBDE, 0xFD07FAFC, 0xF3FBF80B);
	r3 = D(r3, s0_1_2, 0xFA041E12, 0x04814EF6, 0x00FEF902, 0xF313F1FB);
	r4 = D(r4, s0_1_2, 0xD209FE09, 0xECF700FF, 0xEEFF0FF3, 0xFA030D00);
	r5 = D(r5, s0_1_2, 0xF5C6F6CC, 0xEB1D0006, 0xE8F61E18, 0xE519020B);
	r6 = D(r6, s0_1_2, 0x07050A00, 0xEF1CF3FF, 0xFCF910FC, 0x0B111115);
	r7 = D(r7, s0_1_2, 0x0307F705, 0xF5F21B03, 0xF808DC05, 0xDDE1ECF7);
	r0 = D(r0, s0_2_0, 0xF5F1FB0D, 0x0CEA000C, 0x0EF1FFF9, 0xFBFAE617);
	r1 = D(r1, s0_2_0, 0xDEE9FFF7, 0x2DDFE013, 0x050711F9, 0x06F9F5FC);
	r2 = D(r2, s0_2_0, 0x10FA02FC, 0x0FE0F7E9, 0xF50001FE, 0xFD11FFEA);
	r3 = D(r3, s0_2_0, 0x020602CA, 0x1ED00109, 0xF3FAF905, 0xF0E0F2E5);
	r4 = D(r4, s0_2_0, 0x0B0C100B, 0xFBF10301, 0xF611FBFC, 0xF5F51921);
	r5 = D(r5, s0_2_0, 0xFDDD04F6, 0x0B1005E0, 0x05FB0F1A, 0x0409F902);
	r6 = D(r6, s0_2_0, 0x051F1FE4, 0xFEF1EE18, 0xFF05FB05, 0x0C060820);
	r7 = D(r7, s0_2_0, 0xE7F5FDE7, 0xF9FD0603, 0x040DF4D2, 0xFA09F6E3);
	r0 = D(r0, s0_2_1, 0xF014F3F9, 0x1BF90E02, 0xFAFCFAF4, 0x0EF4F9FC);
	r1 = D(r1, s0_2_1, 0xF30C00F0, 0xFE0414EA, 0x04E508F2, 0x15FBFD07);
	r2 = D(r2, s0_2_1, 0x23DB0D87, 0x1F1B21F8, 0xF5100705, 0x0C100704);
	r3 = D(r3, s0_2_1, 0x38FCFA0D, 0x24819EE5, 0xFEECF6FD, 0xEDFBE3F4);
	r4 = D(r4, s0_2_1, 0x0E13F1FC, 0xE4F7140C, 0xF21D0704, 0xC71B1AE2);
	r5 = D(r5, s0_2_1, 0x04CFFBF4, 0x080D2104, 0x02E40701, 0xE6F7FE0D);
	r6 = D(r6, s0_2_1, 0x0F09FEFC, 0x08100702, 0x0CFDFB01, 0x010E1513);
	r7 = D(r7, s0_2_1, 0xFC1D0813, 0xE7E6FF08, 0x161B180A, 0x0E121B16);
	r0 = D(r0, s0_2_2, 0xFAF4FF13, 0x2EF905E6, 0xD6E4EFF7, 0xF9EFF5FA);
	r1 = D(r1, s0_2_2, 0xE71F0A0C, 0x0AD601E0, 0xFDEFF6FA, 0xFEFB07FB);
	r2 = D(r2, s0_2_2, 0xCA28FD38, 0xEF090BEA, 0xF8030BFF, 0x02FCF0F1);
	r3 = D(r3, s0_2_2, 0xECEB02FB, 0xFE81BCF5, 0xFBF805FB, 0xE3F9F6F1);
	r4 = D(r4, s0_2_2, 0x04FD0306, 0xFE091006, 0x02FCF7F8, 0xF50A000C);
	r5 = D(r5, s0_2_2, 0xFED0FECE, 0xF50CF319, 0x12E705F2, 0xED120E05);
	r6 = D(r6, s0_2_2, 0x0106E917, 0x16F40E04, 0xFCFEFE06, 0xF9130D19);
	r7 = D(r7, s0_2_2, 0xFA061103, 0xF304FE05, 0x111D0C05, 0xD712F40C);
	r0 = D(r0, s1_0_0, 0xFEF4FA01, 0x03FFF327, 0xEA03F9EB, 0x13E9EF15);
	r1 = D(r1, s1_0_0, 0xFB15C4EB, 0xF62B28F2, 0xFE14FDEE, 0xFC02F6FA);
	r2 = D(r2, s1_0_0, 0x17022BF3, 0x07051C0A, 0x0B02FBFA, 0x0EF0F809);
	r3 = D(r3, s1_0_0, 0x03F2DE01, 0xEF06FCEB, 0xF4020001, 0xF8F7F202);
	r4 = D(r4, s1_0_0, 0xF503EF0E, 0x0100FA01, 0x00FD0A05, 0x02040200);
	r5 = D(r5, s1_0_0, 0x1D0B1807, 0x0BFEFFFD, 0x03F4EFEF, 0x03F20BF6);
	r6 = D(r6, s1_0_0, 0xEAFE24EF, 0x1BF3D7EE, 0x08FDFD01, 0x0001FC05);
	r7 = D(r7, s1_0_0, 0x12FA010B, 0xFB06F60B, 0x1425F402, 0x0C2DF9F1);
	r0 = D(r0, s1_0_1, 0x070BF807, 0xBBEDF80A, 0x12020D00, 0x1403070F);
	r1 = D(r1, s1_0_1, 0xB5D724B7, 0x02F227F0, 0xFEF4FEFF, 0xF30502E6);
	r2 = D(r2, s1_0_1, 0xFEF81004, 0x1AFF26FE, 0xFCF90508, 0x0BFB2006);
	r3 = D(r3, s1_0_1, 0xF2E2E4DB, 0xFD2702F2, 0xFC0EECEE, 0xFC1D07F6);
	r4 = D(r4, s1_0_1, 0x0FFEEDEF, 0xFC000A16, 0x03F8F5F1, 0xFFFF0805);
	r5 = D(r5, s1_0_1, 0xF1FD0E11, 0x0D0BE504, 0xF8FA0313, 0x04FBFAF2);
	r6 = D(r6, s1_0_1, 0x03F819E7, 0x1CFFEFFB, 0x03FCFE05, 0xEDFF03ED);
	r7 = D(r7, s1_0_1, 0x02060107, 0xE8F90A0B, 0xD9F6FE09, 0xE3081F27);
	r0 = D(r0, s1_0_2, 0x0501FDFF, 0x030DE612, 0x03231217, 0x11071306);
	r1 = D(r1, s1_0_2, 0xF90C06F9, 0x13081213, 0x05FAF8FC, 0x05FAFF01);
	r2 = D(r2, s1_0_2, 0x0AE5F3F5, 0x050706F1, 0x0805FCFD, 0x0CFB0312);
	r3 = D(r3, s1_0_2, 0xF1FC12F4, 0xE21408E7, 0xFEFE08FA, 0xFF0B1506);
	r4 = D(r4, s1_0_2, 0x030A0307, 0x0BF90009, 0x0305FAFD, 0xFB080206);
	r5 = D(r5, s1_0_2, 0x0404F206, 0x060A0015, 0x0D0217FB, 0x000003F5);
	r6 = D(r6, s1_0_2, 0xF1EEF5FD, 0x0E17F901, 0x00FEFFFC, 0xF400F1F4);
	r7 = D(r7, s1_0_2, 0xFC0300FB, 0x0309FA07, 0x0404F9FA, 0x0025ED1E);
	r0 = D(r0, s1_1_0, 0x0601E900, 0xE31C0EF4, 0x030FFF04, 0xF9000508);
	r1 = D(r1, s1_1_0, 0x19013712, 0x160BEAE2, 0x0AFC0BFA, 0x0EFD1704);
	r2 = D(r2, s1_1_0, 0x11050308, 0x140DE3F4, 0xFE010103, 0xFC000DF9);
	r3 = D(r3, s1_1_0, 0xF1FD1D0D, 0xBF112209, 0xFD05FA01, 0x1AF9EEF7);
	r4 = D(r4, s1_1_0, 0x0BF700FC, 0x06FDF703, 0xF3050408, 0x0700F2F3);
	r5 = D(r5, s1_1_0, 0xF51100F1, 0xE20711F6, 0x1CF7F1FC, 0x02F2F912);
	r6 = D(r6, s1_1_0, 0x0EFEF108, 0xFD0412F9, 0x08FC06FC, 0x09F31006);
	r7 = D(r7, s1_1_0, 0xDCFE09F1, 0xFD0203FC, 0xF802FCEC, 0xFE1CE0E3);
	r0 = D(r0, s1_1_1, 0xF10B18F3, 0xCA17D914, 0xEAE52420, 0x060BDA04);
	r1 = D(r1, s1_1_1, 0x14E5E006, 0xF0EEEC42, 0xF9FD03FF, 0x1CF7FF05);
	r2 = D(r2, s1_1_1, 0xD5F1F5F1, 0xD8F53117, 0x14F9000B, 0xF2D20119);
	r3 = D(r3, s1_1_1, 0xE0F410EC, 0xF9F6090A, 0xF104F4F3, 0xDC0017F6);
	r4 = D(r4, s1_1_1, 0x020A14FC, 0xF2042503, 0x02F60802, 0x02F9F5FD);
	r5 = D(r5, s1_1_1, 0xF9F71F06, 0x1DF7FA11, 0xF6F71313, 0x0BF70005);
	r6 = D(r6, s1_1_1, 0x160CFEEF, 0xF4041408, 0x0AFFF8F4, 0x291406E2);
	r7 = D(r7, s1_1_1, 0xF90DFD17, 0xD9FAF7F1, 0xFCDBED0B, 0xFF9C0D0D);
	r0 = D(r0, s1_1_2, 0xFAEDF9FF, 0xFDFE2BF7, 0x0A0A09FF, 0x07FF0503);
	r1 = D(r1, s1_1_2, 0x25FAFD09, 0x0CFDE9E8, 0x040202F3, 0x04FE0306);
	r2 = D(r2, s1_1_2, 0x040FEF15, 0x0E200F15, 0xF9FD0C02, 0xF6E90901);
	r3 = D(r3, s1_1_2, 0x01E803FD, 0xCF14EEEE, 0xFBFDFD01, 0xF6EEF102);
	r4 = D(r4, s1_1_2, 0x00FA1813, 0xFC05020B, 0x050101F7, 0x0000FDFD);
	r5 = D(r5, s1_1_2, 0xF92005F0, 0x08FEF5FD, 0x17FA08FA, 0xFA0002F6);
	r6 = D(r6, s1_1_2, 0x001519E6, 0xFEFD040B, 0x01FEFDF9, 0x0402FB16);
	r7 = D(r7, s1_1_2, 0xFD020501, 0xFEFCFBFA, 0x050F0111, 0x090FF805);
	r0 = D(r0, s1_2_0, 0xF9020B02, 0x01EF0807, 0xF30BF60B, 0xFCFD0F0C);
	r1 = D(r1, s1_2_0, 0xFC04150A, 0x0FFE06FA, 0xFCF806FF, 0x0FFB0DFE);
	r2 = D(r2, s1_2_0, 0xF3FFF502, 0xEC00FD0A, 0x0E0204FC, 0xFE0D03F6);
	r3 = D(r3, s1_2_0, 0x0FF1EDF1, 0xC413FB1D, 0xFB04FE03, 0xE803F90D);
	r4 = D(r4, s1_2_0, 0x00FC0309, 0x01040104, 0x05F40403, 0xFA010102);
	r5 = D(r5, s1_2_0, 0xD40B07FF, 0x1C02FFFC, 0x07F30F01, 0x1602060D);
	r6 = D(r6, s1_2_0, 0x11F1DD06, 0xFBF3FF02, 0x08FA0203, 0x200A0901);
	r7 = D(r7, s1_2_0, 0x060A03FE, 0xFB02FEFF, 0x01F7060B, 0xF92F0E09);
	r0 = D(r0, s1_2_1, 0xF8FA0D02, 0xF6E30309, 0xFE09EB0D, 0xFE10F403);
	r1 = D(r1, s1_2_1, 0xFA16DFF8, 0xCDF303F5, 0x020CFAFD, 0x0608F400);
	r2 = D(r2, s1_2_1, 0xDF13E7E1, 0xE1FFF603, 0x03FCFF00, 0xFF02F8F4);
	r3 = D(r3, s1_2_1, 0x1706EB02, 0x1B44F30E, 0x0208FF00, 0xFDF40DFF);
	r4 = D(r4, s1_2_1, 0x0306FF07, 0xF1F605FF, 0xF9FDFF04, 0xF4F80DFD);
	r5 = D(r5, s1_2_1, 0xF2F60AFC, 0xFBFA0CFD, 0x06E51104, 0x01FB0100);
	r6 = D(r6, s1_2_1, 0x02EC00F8, 0x08F7F907, 0x1106FFFB, 0xF3D72004);
	r7 = D(r7, s1_2_1, 0x06F7EDFE, 0x0112010A, 0xE4D6FD04, 0x0DFB0BDD);
	r0 = D(r0, s1_2_2, 0xF211FAF9, 0x04EA0611, 0xFD000304, 0xF301F901);
	r1 = D(r1, s1_2_2, 0x021411F9, 0xE819E322, 0x000908FA, 0x0B05F502);
	r2 = D(r2, s1_2_2, 0xF50F0A09, 0x04ECECFA, 0x03FEF9FF, 0x0006EFF8);
	r3 = D(r3, s1_2_2, 0x0F13270E, 0xDC46010A, 0x00FD0101, 0x050CFE05);
	r4 = D(r4, s1_2_2, 0x05F5F6FD, 0x020108FF, 0x0BF8FF04, 0x00FD08F7);
	r5 = D(r5, s1_2_2, 0xF61AFAF9, 0x0AF50300, 0x0A07FA04, 0xFDF3FA02);
	r6 = D(r6, s1_2_2, 0x0BEF010D, 0xFD01EB07, 0x00FBFEFF, 0xFC04F9F0);
	r7 = D(r7, s1_2_2, 0xF9FCFD02, 0xF50012F4, 0x02F2F8F7, 0xFA09EDFA);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(-1.362e-02, 2.544e-02, 3.850e-03, 2.607e-02);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(8.801e-03, 4.858e-03, -2.529e-02, -1.887e-02);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(4.711e-04, 2.966e-02, -2.338e-03, -3.078e-02);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(-4.497e-02, -1.614e-02, 2.966e-03, -1.802e-03);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(1.009e-02, -4.678e-03, -1.269e-03, -4.468e-04);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(4.579e-02, -2.357e-02, 1.326e-02, 4.519e-02);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 0), f5);
	f6 = vec4(r6) * 6.2000124e-05;
	f6 += vec4(4.618e-03, -1.340e-02, 1.096e-02, -4.921e-02);
	f6 = clamp(f6, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f6);
	f7 = vec4(r7) * 6.2000124e-05;
	f7 += vec4(-9.324e-03, -3.099e-02, -2.304e-02, 2.017e-02);
	f7 = clamp(f7, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 1), f7);
}

//!DESC [CuNNy_4x32_DS_vk] -conv3
//!HOOK LUMA
//!COMPUTE 32 16 8 8
//!BIND conv2
//!BIND LUMA
//!SAVE conv3
//!WIDTH LUMA.w 4 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[8][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(4, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec2 p;
			vec4 r, g, b, a;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(1, 1)) * conv2_pt;
			r = conv2_gather(p, 0);
			g = conv2_gather(p, 1);
			b = conv2_gather(p, 2);
			a = conv2_gather(p, 3);
			vec4 v0 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v1 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v2 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v3 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(3, 1)) * conv2_pt;
			r = conv2_gather(p, 0);
			g = conv2_gather(p, 1);
			b = conv2_gather(p, 2);
			a = conv2_gather(p, 3);
			vec4 v4 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v5 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v6 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v7 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
			G[6][ay][ax] = int(packSnorm4x8(v6));
			G[7][ay][ax] = int(packSnorm4x8(v7));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5, r6, r7;
	vec4 f0, f1, f2, f3, f4, f5, f6, f7;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0); r6 = ivec4(0); r7 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xF91D0400, 0xF10EFF07, 0xF0F701F5, 0x0403FDF6);
	r1 = D(r1, s0_0_0, 0x1AF80817, 0x11C60F0C, 0x14010D0F, 0x22E50001);
	r2 = D(r2, s0_0_0, 0xECFC0DFF, 0xF80CFF00, 0xF50906FC, 0xEEEEF6FC);
	r3 = D(r3, s0_0_0, 0x0A0E08F9, 0xFFF9F9EB, 0x0BF204FA, 0x11E5F8F7);
	r4 = D(r4, s0_0_0, 0xF9050BFF, 0x06ED040A, 0xFD1D0B02, 0x02040911);
	r5 = D(r5, s0_0_0, 0x03070407, 0xFBF302F0, 0xFD13010C, 0x05F3E7F8);
	r6 = D(r6, s0_0_0, 0xFDF302F6, 0xEE07FFE7, 0xCD03FFF4, 0xF80DF7FA);
	r7 = D(r7, s0_0_0, 0xFCF2FF03, 0xFCF6FCE9, 0x0BFFFD02, 0xFFF604FA);
	r0 = D(r0, s0_0_1, 0xF601FFE7, 0x06F20ADB, 0xFDFDFAE2, 0x1AFEFDFD);
	r1 = D(r1, s0_0_1, 0xF8ED000A, 0xEDF00309, 0x000A0519, 0xF9150401);
	r2 = D(r2, s0_0_1, 0x131209F7, 0xF90A05F5, 0x0204FF00, 0xF211F90C);
	r3 = D(r3, s0_0_1, 0xF4FBF1E5, 0x00EFF901, 0x1302030A, 0x09EEF603);
	r4 = D(r4, s0_0_1, 0x03140CFE, 0x09110313, 0xF6F9F614, 0xFE0F0001);
	r5 = D(r5, s0_0_1, 0xFC03030A, 0xFD0A03F4, 0xF8FE0300, 0xF51BCD09);
	r6 = D(r6, s0_0_1, 0xDAF2F8EB, 0xF9EA0308, 0xD9F9F410, 0xEAEEFD00);
	r7 = D(r7, s0_0_1, 0x0E0B0004, 0x0C0508F6, 0x0205FC06, 0xF2090A00);
	r0 = D(r0, s0_0_2, 0xFF060203, 0xFFFC070A, 0xFDFB010B, 0xFB00FA00);
	r1 = D(r1, s0_0_2, 0x0CF0FFF6, 0x03F005FE, 0xFC000902, 0x00FC0801);
	r2 = D(r2, s0_0_2, 0xF9180D0F, 0x03050305, 0x0705FC05, 0x0B0003F6);
	r3 = D(r3, s0_0_2, 0xFC09FDFA, 0xF600FD0D, 0xF6070308, 0x0EF6FBF4);
	r4 = D(r4, s0_0_2, 0xFD000B08, 0xF6040C02, 0xF606FF0B, 0xF7000D0D);
	r5 = D(r5, s0_0_2, 0xFF0202FE, 0x0BF8F5F3, 0x04080107, 0x0B09DFEA);
	r6 = D(r6, s0_0_2, 0x0BFE0306, 0x04090602, 0xF2FD04FF, 0xF90A0810);
	r7 = D(r7, s0_0_2, 0xF50903FE, 0x04FAFFF5, 0x02FBFE05, 0x010307F7);
	r0 = D(r0, s0_1_0, 0xFF0702F6, 0x09F3E9FF, 0x01E7F10D, 0xFF08FE07);
	r1 = D(r1, s0_1_0, 0x0200F6FA, 0x00F6E409, 0x040D0A09, 0xF9080607);
	r2 = D(r2, s0_1_0, 0xFD010200, 0x02FDF10D, 0xFB0507F5, 0xFDEFFA03);
	r3 = D(r3, s0_1_0, 0xF8F22104, 0x10FC010A, 0x0A0D0109, 0x01FCEB09);
	r4 = D(r4, s0_1_0, 0xFD120E0D, 0xFD120E2B, 0xF61B17EC, 0x0F131208);
	r5 = D(r5, s0_1_0, 0xFD040A14, 0xFDEAFAFE, 0x07FAFE0A, 0xFD15BB08);
	r6 = D(r6, s0_1_0, 0x0CEAEDF8, 0x0D09E90D, 0xE8D0E7F9, 0x0100F507);
	r7 = D(r7, s0_1_0, 0x000B0300, 0x0904F4FB, 0x0B08F9FF, 0x01EF000C);
	r0 = D(r0, s0_1_1, 0x0DE0FFF4, 0xEDE2DA0C, 0x11EFEDF5, 0xFDF6080F);
	r1 = D(r1, s0_1_1, 0xD107F1F0, 0x04F9DCFD, 0xE908FE13, 0xF5160406);
	r2 = D(r2, s0_1_1, 0x0FE72316, 0x1201FE02, 0xFF070F0C, 0xE9EFFA1B);
	r3 = D(r3, s0_1_1, 0x051116F6, 0x13F7F50F, 0xF708020D, 0x09120814);
	r4 = D(r4, s0_1_1, 0xFD1C0606, 0xEA0F0EFF, 0x1506F804, 0xF5080C0B);
	r5 = D(r5, s0_1_1, 0xFD0D0704, 0x0F0708EF, 0xF11702FC, 0xF3F4D308);
	r6 = D(r6, s0_1_1, 0x05EFED06, 0x07FEDAED, 0xEFC4EDD4, 0x1CFFE50F);
	r7 = D(r7, s0_1_1, 0xE7ED0802, 0xEF00EFE3, 0xE905EF00, 0x06051101);
	r0 = D(r0, s0_1_2, 0xF8FBFE10, 0x04F9FCF6, 0x02FEF805, 0xF50EFE0B);
	r1 = D(r1, s0_1_2, 0x07FCFD00, 0xFA03060C, 0x0900FDFD, 0xFA0E02FD);
	r2 = D(r2, s0_1_2, 0xF9250EFA, 0xF11605F9, 0x00FA0502, 0x0E03FAF9);
	r3 = D(r3, s0_1_2, 0xF8F2F9FE, 0x0E02FA0C, 0xF4110001, 0xFCF9ECFD);
	r4 = D(r4, s0_1_2, 0xFC060003, 0xFB12FBFA, 0xFB02FB0D, 0xF91AFA01);
	r5 = D(r5, s0_1_2, 0x080502FD, 0x04E505F6, 0xFF010301, 0x05EFCB16);
	r6 = D(r6, s0_1_2, 0xE8080328, 0xF5FA061E, 0xDE22FFF2, 0xFEF3F90F);
	r7 = D(r7, s0_1_2, 0xF903FCFC, 0x11FAFAFB, 0x0309FEFD, 0x0C0B0B04);
	r0 = D(r0, s0_2_0, 0xF90CFD04, 0xEEF5E50E, 0xF904F003, 0xFDFF01F7);
	r1 = D(r1, s0_2_0, 0xFDFBFCF2, 0x06F9F7F5, 0x08070B05, 0x0A190E05);
	r2 = D(r2, s0_2_0, 0xFA0D060C, 0x0401ED00, 0x020107FE, 0xF10EEF07);
	r3 = D(r3, s0_2_0, 0x050A0BF3, 0x020D11FC, 0xFE020308, 0x0CF60AF2);
	r4 = D(r4, s0_2_0, 0x030E0C04, 0xFB0E0E02, 0xFD0F0BF3, 0x13270D0C);
	r5 = D(r5, s0_2_0, 0xFE03FF09, 0x0C00FAFE, 0xF7180F15, 0x0FF40200);
	r6 = D(r6, s0_2_0, 0xF705020B, 0xF306F9EB, 0x15EF0625, 0x0506FCF5);
	r7 = D(r7, s0_2_0, 0xF6FD0204, 0x01F8FE00, 0xFE0B0708, 0xFA0EFC0D);
	r0 = D(r0, s0_2_1, 0x00F0FF08, 0x11FBC6FF, 0x06FE0506, 0x08FF08FD);
	r1 = D(r1, s0_2_1, 0x04E8F408, 0xFEF5EE0C, 0xF503FE0A, 0xFE091506);
	r2 = D(r2, s0_2_1, 0xFB0706F1, 0x04220406, 0x030501F4, 0x21E7F900);
	r3 = D(r3, s0_2_1, 0xF0080AF0, 0xF9F6FBF3, 0x01031006, 0x1403F3EA);
	r4 = D(r4, s0_2_1, 0x00050707, 0xE9F61509, 0xF4FAFE0B, 0xE30B060F);
	r5 = D(r5, s0_2_1, 0xF804FF0E, 0x0600F508, 0xEA080EF0, 0xEEFEE103);
	r6 = D(r6, s0_2_1, 0x00E806F8, 0xF8FBEDFB, 0xE51B0300, 0xF20CFDF0);
	r7 = D(r7, s0_2_1, 0xFC03070E, 0x03010A02, 0xFD0505F5, 0xF7001005);
	r0 = D(r0, s0_2_2, 0xF5FAF405, 0xFAE1FF00, 0xFA01F100, 0x0BF2F901);
	r1 = D(r1, s0_2_2, 0x05FEFC02, 0xF90A06FB, 0x03030305, 0xF401020A);
	r2 = D(r2, s0_2_2, 0x0107070A, 0xF50202EF, 0x0A010BFE, 0x0D03FEFC);
	r3 = D(r3, s0_2_2, 0x020704F0, 0x09FA04FD, 0xFF040004, 0x1601FAF5);
	r4 = D(r4, s0_2_2, 0x040D0300, 0xFFFEFE0A, 0xFEFB0704, 0xF6F9050E);
	r5 = D(r5, s0_2_2, 0xFEFF0408, 0x0B0E05FC, 0xF4070201, 0xF516E002);
	r6 = D(r6, s0_2_2, 0xFBF7FAFA, 0x150DF708, 0xFDE6F0F6, 0x1906F4FB);
	r7 = D(r7, s0_2_2, 0xF9020109, 0xFF0BFCF7, 0x0209FC06, 0xF5FDFDFB);
	r0 = D(r0, s1_0_0, 0xFAFCFAF8, 0xFFFC04F5, 0xFC0CFC01, 0x0304F503);
	r1 = D(r1, s1_0_0, 0x030FE0FE, 0x0A02F404, 0x0802FDFF, 0x03F60C07);
	r2 = D(r2, s1_0_0, 0xFF00F307, 0x09FE0BF9, 0x03FBF8F8, 0x0403F606);
	r3 = D(r3, s1_0_0, 0x07FEEB03, 0x00030303, 0xFC04FB03, 0x07010005);
	r4 = D(r4, s1_0_0, 0xFD0700FF, 0xFC08FD08, 0xFF03EBFE, 0xFCFC060E);
	r5 = D(r5, s1_0_0, 0x06FEFCFD, 0x0106FEFA, 0x0CF80005, 0xFA0C01FC);
	r6 = D(r6, s1_0_0, 0x06FB0405, 0x03F81201, 0x0C04DF0B, 0x0CF515FF);
	r7 = D(r7, s1_0_0, 0x0101F905, 0xFF040A02, 0x0203F402, 0x00FFFC04);
	r0 = D(r0, s1_0_1, 0xFF04EDF2, 0x1309E2FF, 0x0C10F704, 0x0C04F9FF);
	r1 = D(r1, s1_0_1, 0xE9FE0903, 0xEDE81AFE, 0xFAE90CFC, 0x0C1A0F02);
	r2 = D(r2, s1_0_1, 0x110ABE0A, 0x19F40405, 0x0401F5FF, 0x050DFE06);
	r3 = D(r3, s1_0_1, 0xFD0AE6FD, 0xF9060908, 0xFE0107FB, 0xF50D070C);
	r4 = D(r4, s1_0_1, 0x0B0D0305, 0x03DA2F04, 0x050303DC, 0xFDF70702);
	r5 = D(r5, s1_0_1, 0xFDFAFBFD, 0x1CFAF9F9, 0x05E50607, 0x03F6F800);
	r6 = D(r6, s1_0_1, 0xFC04100E, 0xFC09190E, 0x1CFFE8F5, 0x07F21218);
	r7 = D(r7, s1_0_1, 0xF8F014FA, 0x0021FEFC, 0xFBF60008, 0x0DFDCD05);
	r0 = D(r0, s1_0_2, 0x10EEFBFC, 0x10EEFE08, 0x0BEEF901, 0x0306F50A);
	r1 = D(r1, s1_0_2, 0x09E7F508, 0x0AFCFDFF, 0x06FE02FF, 0x05F9F70F);
	r2 = D(r2, s1_0_2, 0x02E5F4F6, 0xEDF50D04, 0xEF0206F0, 0x0400FB05);
	r3 = D(r3, s1_0_2, 0x09080FF3, 0x121E0803, 0xFE030808, 0x040EF8F8);
	r4 = D(r4, s1_0_2, 0x0DECFB06, 0xF60BFD1B, 0xFF040CF8, 0x04F30214);
	r5 = D(r5, s1_0_2, 0x01FFFD02, 0x010406FB, 0xFEF9FF01, 0x11EEF004);
	r6 = D(r6, s1_0_2, 0xF0250E08, 0xF017F901, 0x06D0F305, 0xF21E1307);
	r7 = D(r7, s1_0_2, 0xF608FE09, 0xFEFBF4FE, 0x04ED0206, 0x0BDFE5ED);
	r0 = D(r0, s1_1_0, 0xFE0114FC, 0x08FB0EFD, 0x09FBFDFE, 0xFE081204);
	r1 = D(r1, s1_1_0, 0xFBF0CC0B, 0x02FAD8FC, 0x08F0EBFC, 0xFF06E614);
	r2 = D(r2, s1_1_0, 0xFE011504, 0x07EB1A04, 0x04FF02FB, 0x04071A02);
	r3 = D(r3, s1_1_0, 0x0400FD00, 0x0106ECFF, 0x0000F206, 0x0603EA08);
	r4 = D(r4, s1_1_0, 0x0AF60803, 0x10EED908, 0x01FAFA0B, 0x09F9F104);
	r5 = D(r5, s1_1_0, 0x0DF5FFFA, 0xFF01FD03, 0x10F30E01, 0x03F702F9);
	r6 = D(r6, s1_1_0, 0xF9FF0717, 0x10011B01, 0x05E92515, 0x09FCFEF8);
	r7 = D(r7, s1_1_0, 0x00FEF70E, 0xFF020309, 0x00FAFA05, 0x06FE1100);
	r0 = D(r0, s1_1_1, 0x0909F416, 0x0DE3F322, 0x130F1212, 0x05DEE805);
	r1 = D(r1, s1_1_1, 0x0CE70C07, 0x370DEDF3, 0x1ED706F5, 0x28B20302);
	r2 = D(r2, s1_1_1, 0x0BF3C517, 0x0AED0E0D, 0x0D25F500, 0x00EC1A05);
	r3 = D(r3, s1_1_1, 0x09EFF1FF, 0x241B09EE, 0x25E5F501, 0x0DD7D8FD);
	r4 = D(r4, s1_1_1, 0x01D6EDFF, 0x0D9EE6DA, 0xDC15E3E9, 0x1A83F0F9);
	r5 = D(r5, s1_1_1, 0x07110400, 0x322D1618, 0x1C0E1010, 0x16FB2609);
	r6 = D(r6, s1_1_1, 0x0B050F23, 0x0A15EC18, 0xEEFA221A, 0x13FA12FE);
	r7 = D(r7, s1_1_1, 0x07C0F200, 0x04EB0F0C, 0x04E004FA, 0x03F4F6FF);
	r0 = D(r0, s1_1_2, 0x071B090C, 0xFE1C0413, 0xFD23FE11, 0x181E0202);
	r1 = D(r1, s1_1_2, 0x1A1CEE1A, 0xFB09E91B, 0x14F1F4FC, 0x12E60405);
	r2 = D(r2, s1_1_2, 0xFBD7C3C9, 0xF3DA18EA, 0xF0D0F6E5, 0x06F6FB06);
	r3 = D(r3, s1_1_2, 0xF8F1FDFD, 0xFEE8F3EC, 0x00FD09F8, 0xF019ED11);
	r4 = D(r4, s1_1_2, 0x07F903FA, 0xFBEE0A09, 0x0BEE00EE, 0x05DF2805);
	r5 = D(r5, s1_1_2, 0x03F6F7F3, 0xEBEDE30D, 0xF70B0B09, 0xEB0FF01B);
	r6 = D(r6, s1_1_2, 0xF3F8FE0F, 0x04330B0C, 0xE5121C17, 0x08080FED);
	r7 = D(r7, s1_1_2, 0x03FDFA0B, 0xF320FC0E, 0x1004FD09, 0x0EDDE4F6);
	r0 = D(r0, s1_2_0, 0x0CF5F702, 0x12F7F9FD, 0x03080301, 0x040102FD);
	r1 = D(r1, s1_2_0, 0x0AF2FE04, 0x03F9FF05, 0xFFF90903, 0x07FD150D);
	r2 = D(r2, s1_2_0, 0x03030100, 0xFDFC07FA, 0xFC03EFFB, 0x0D080500);
	r3 = D(r3, s1_2_0, 0xFB08F407, 0xF60DE1FF, 0x02FFFF02, 0xFB07F9FF);
	r4 = D(r4, s1_2_0, 0x03FD11FD, 0xFAFF0F08, 0x0BEFF603, 0xF3FA000F);
	r5 = D(r5, s1_2_0, 0x07FE09FC, 0x03FE0400, 0x03E6FC00, 0xFFFBF906);
	r6 = D(r6, s1_2_0, 0xFD00FC08, 0xFDFFEF01, 0x00FDE811, 0xF108F101);
	r7 = D(r7, s1_2_0, 0x02FE0407, 0xFF050603, 0xF6020B05, 0x010010FF);
	r0 = D(r0, s1_2_1, 0x0EF9E808, 0xF700E419, 0xFA03FCFD, 0x0C05F607);
	r1 = D(r1, s1_2_1, 0x0BFE2606, 0x0AF81000, 0x14FC0FF9, 0x0BECEE02);
	r2 = D(r2, s1_2_1, 0x05F8D701, 0xFAECFC06, 0x021009FB, 0x02030115);
	r3 = D(r3, s1_2_1, 0xF619EC01, 0xF5FFF2E7, 0x0606F705, 0xF70FF6F3);
	r4 = D(r4, s1_2_1, 0x050100F1, 0x0BE3D7F0, 0x050EFDF0, 0x02C5C2EB);
	r5 = D(r5, s1_2_1, 0x11F10709, 0x0FFC0703, 0x06D2E600, 0x15FCFFFC);
	r6 = D(r6, s1_2_1, 0xF3F4EBF7, 0x02FE1B0C, 0xF6E1BB06, 0xFC07FFEC);
	r7 = D(r7, s1_2_1, 0xFFEE1708, 0xFE090808, 0xF8EFFCFE, 0xFDF5D204);
	r0 = D(r0, s1_2_2, 0x000D030D, 0x00FBFD09, 0xF8030609, 0x190BF901);
	r1 = D(r1, s1_2_2, 0xFBF3FE03, 0x0BE3FAFE, 0xFEEF08FA, 0x1AF6FAF1);
	r2 = D(r2, s1_2_2, 0x0CF4E0F1, 0xEAF6EDED, 0xF602F6F6, 0xFB00F605);
	r3 = D(r3, s1_2_2, 0xFA12F2E8, 0x0C00F0EE, 0x0202F9F9, 0xED0DF0F6);
	r4 = D(r4, s1_2_2, 0xFE0FF4F6, 0x0DFAFC08, 0x00FE05FC, 0x15E0EDF2);
	r5 = D(r5, s1_2_2, 0x03E9FBF8, 0x0807FAF2, 0x11010A05, 0x0AFCF407);
	r6 = D(r6, s1_2_2, 0xF8FA09F2, 0x01EA130A, 0x0228C2F0, 0x18EB04DF);
	r7 = D(r7, s1_2_2, 0xF3F80B0C, 0x08FE0205, 0x02FD0501, 0x0FF5E6FC);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xFC020301, 0xFA010FDA, 0xFF0703F6, 0xF11AF707);
	r1 = D(r1, s0_0_0, 0xFAFFEF15, 0x0CF905FC, 0xFDF9F10E, 0x02F90308);
	r2 = D(r2, s0_0_0, 0xF5110411, 0xFE020103, 0x0CF804FF, 0xF807FFFE);
	r3 = D(r3, s0_0_0, 0xFF0BFC0F, 0x040109FB, 0xFF04FB0A, 0x0D0313FC);
	r4 = D(r4, s0_0_0, 0xF60EFA0C, 0xF90F0117, 0xFC0BEA03, 0xF1FFFE0F);
	r5 = D(r5, s0_0_0, 0xFE07FA09, 0x010FFD07, 0x01F7FA0A, 0xFEEFF6F8);
	r6 = D(r6, s0_0_0, 0x10F20EF4, 0xFD021CDF, 0x01FB23C7, 0xED0B14DE);
	r7 = D(r7, s0_0_0, 0xFB0CFF0C, 0xF71011F9, 0xF902F61A, 0xF40FFE05);
	r0 = D(r0, s0_0_1, 0xFC0AF4FA, 0xF310F9FC, 0x0019FFF8, 0xF0160104);
	r1 = D(r1, s0_0_1, 0xF6FA0A03, 0x1DDB1BE0, 0xFFFD0205, 0x06050A02);
	r2 = D(r2, s0_0_1, 0xE23AE417, 0x03F7FB07, 0xFFF8FAF6, 0x03F3FBFD);
	r3 = D(r3, s0_0_1, 0xF80FFDEE, 0x0B002506, 0xF902FF0C, 0x17EB10F3);
	r4 = D(r4, s0_0_1, 0xF61C000F, 0x09F50B10, 0xF8100503, 0x1103100E);
	r5 = D(r5, s0_0_1, 0xF60EFD03, 0xF319F2EA, 0xFE03FC16, 0x13ECF924);
	r6 = D(r6, s0_0_1, 0x1FE00FE8, 0x1FD00BF8, 0x05FDFA0E, 0x22D9130C);
	r7 = D(r7, s0_0_1, 0x00FEFB10, 0x0309FAFA, 0xFFFA080F, 0xED25F706);
	r0 = D(r0, s0_0_2, 0xFB00FBF4, 0x07F7FDFD, 0x09EF06FA, 0xFD100005);
	r1 = D(r1, s0_0_2, 0xF701F908, 0x01E6FE0A, 0xFFF80004, 0xFA030209);
	r2 = D(r2, s0_0_2, 0xE911000D, 0x0FF505FF, 0x0BFB01FD, 0xFC0EFB08);
	r3 = D(r3, s0_0_2, 0x06020CEE, 0x0EF40BF7, 0xFB03030E, 0x030808F4);
	r4 = D(r4, s0_0_2, 0xFA05FD00, 0xFD070508, 0x0CED00FC, 0xFE020108);
	r5 = D(r5, s0_0_2, 0x00000006, 0x05FF00FF, 0x00FEFD00, 0xF1F5F90A);
	r6 = D(r6, s0_0_2, 0x09F50AEB, 0x050B01FF, 0xF90BE904, 0x0BF60BF6);
	r7 = D(r7, s0_0_2, 0xFA0908FE, 0xF8110002, 0xF6FB0109, 0xF40FF603);
	r0 = D(r0, s0_1_0, 0xF1FF0BEF, 0xF11014FC, 0xFD1406F5, 0xFB02F903);
	r1 = D(r1, s0_1_0, 0xFE03F1F7, 0x26F014ED, 0x13F0F004, 0x1DD7FB17);
	r2 = D(r2, s0_1_0, 0xE6090A0B, 0x13FD0E02, 0x0A02FCFB, 0xED1006F1);
	r3 = D(r3, s0_1_0, 0x0E0EF7F6, 0x05FEE103, 0xF6FFF40C, 0x0B0E11E2);
	r4 = D(r4, s0_1_0, 0xFB10EC0C, 0xDF05E814, 0xFEFCDF06, 0xED10E415);
	r5 = D(r5, s0_1_0, 0xF10AF410, 0x0F0004FD, 0x000506F5, 0x0803FDFB);
	r6 = D(r6, s0_1_0, 0x04160FFA, 0xE70001F8, 0xF71114DA, 0x09E8F325);
	r7 = D(r7, s0_1_0, 0xFA16FD0B, 0xF22501F8, 0xFBF1FB11, 0xF6060917);
	r0 = D(r0, s0_1_1, 0x09FE1D0D, 0x0EF507FC, 0x1B3D0D07, 0xFAEC090E);
	r1 = D(r1, s0_1_1, 0xFCFE15F7, 0x21E51103, 0x00F7F910, 0x06E6D9FB);
	r2 = D(r2, s0_1_1, 0xE2EA0219, 0xFCE1E4F9, 0xEDF1F402, 0x1EF3FAF9);
	r3 = D(r3, s0_1_1, 0xFA18FAEC, 0xEE0D06F3, 0xF0170717, 0x0A0104FD);
	r4 = D(r4, s0_1_1, 0xD80FE4F5, 0xF39AF4EC, 0xDF2601FB, 0x16FAE514);
	r5 = D(r5, s0_1_1, 0xEA1102FD, 0xE70D08FE, 0x0FFA0305, 0x070F1409);
	r6 = D(r6, s0_1_1, 0x09120DDF, 0x1D0E1309, 0x25F92CDF, 0xDD12100A);
	r7 = D(r7, s0_1_1, 0x0A120010, 0xF922050B, 0xFE190204, 0xC2120107);
	r0 = D(r0, s0_1_2, 0x01F008F4, 0xF406FE01, 0x0403030B, 0x02F7FDF7);
	r1 = D(r1, s0_1_2, 0xF9FC070A, 0xF0FC0601, 0xFCFCFD07, 0xEFF8F808);
	r2 = D(r2, s0_1_2, 0xCC0D06FB, 0x1200FCF9, 0x0502FAFD, 0xF5FDFB15);
	r3 = D(r3, s0_1_2, 0xFB1AFE05, 0xF406FB00, 0xFB0DFA01, 0xEB1308F7);
	r4 = D(r4, s0_1_2, 0xEF07F90B, 0x04F3FEF5, 0x02F8FFFC, 0x03F00122);
	r5 = D(r5, s0_1_2, 0xFFFDFB04, 0xF9FFFEFA, 0xFA0BFFFF, 0xF4FCFE0D);
	r6 = D(r6, s0_1_2, 0xFAFD0AF5, 0x150503F9, 0x15E120FF, 0x1EF802FA);
	r7 = D(r7, s0_1_2, 0xF80D0DFC, 0xFCFF00FE, 0xF701FF05, 0xD9F3FFFE);
	r0 = D(r0, s0_2_0, 0x0FFB0808, 0x05020304, 0xFE0CFCFD, 0x0BFE03FA);
	r1 = D(r1, s0_2_0, 0xFBFA120A, 0x03F510F8, 0xF1FBFF02, 0xC1D3F50F);
	r2 = D(r2, s0_2_0, 0xEB0AFC0D, 0xEEF301FA, 0xF9150BFA, 0x09FC03FC);
	r3 = D(r3, s0_2_0, 0xF7100601, 0xFC24EDEB, 0xF809FF07, 0x060813EC);
	r4 = D(r4, s0_2_0, 0xF3F1F90D, 0xFFE3F411, 0x09E6FC0A, 0xDDFCE312);
	r5 = D(r5, s0_2_0, 0xF8060504, 0xFA070EFF, 0xFD02F4FA, 0xED14F1F8);
	r6 = D(r6, s0_2_0, 0x02FE02F5, 0x16EB0208, 0x27FAB7F0, 0xFD02FAF7);
	r7 = D(r7, s0_2_0, 0x08090105, 0xFD0D0308, 0xF100FE04, 0xF010F301);
	r0 = D(r0, s0_2_1, 0xEE1C02FE, 0xD7FF0102, 0xEB27FE07, 0xE0050BF1);
	r1 = D(r1, s0_2_1, 0xF3F20EFF, 0x000508FC, 0x03E8010C, 0xD7C8FCFC);
	r2 = D(r2, s0_2_1, 0x81F907F6, 0xF9FEF206, 0x1A06FEF7, 0xE70CFA02);
	r3 = D(r3, s0_2_1, 0x181103EE, 0xFD07FDF0, 0xE51902FE, 0x04F707E7);
	r4 = D(r4, s0_2_1, 0xE9F80206, 0xACE904FC, 0x10070005, 0xCBF5FFEA);
	r5 = D(r5, s0_2_1, 0x10EB0303, 0xFF060303, 0xFA31FAE9, 0xCDFF070B);
	r6 = D(r6, s0_2_1, 0x1212FBEC, 0xFF10050B, 0x052CF0E3, 0x1002F601);
	r7 = D(r7, s0_2_1, 0x18F4030B, 0xD8FF0703, 0xE8EE0003, 0xC12FEDF4);
	r0 = D(r0, s0_2_2, 0xEB120BFE, 0xE80506F2, 0xFB00FC06, 0xF51401FA);
	r1 = D(r1, s0_2_2, 0x0DF60304, 0x00F8FC08, 0x0CF20005, 0xF0F90009);
	r2 = D(r2, s0_2_2, 0xF31506E6, 0x1009F2F3, 0x0101FE00, 0x06F50111);
	r3 = D(r3, s0_2_2, 0xF50B02F0, 0xF70EFBFF, 0xF80FFAFA, 0x0B0305F3);
	r4 = D(r4, s0_2_2, 0xE2FCFFFC, 0xF30104F9, 0xFD02FEF5, 0xE70AFDF3);
	r5 = D(r5, s0_2_2, 0x05FB00FD, 0x04F000FB, 0xF8F70CFA, 0x09FB00FD);
	r6 = D(r6, s0_2_2, 0xFE04FFF4, 0xFA040802, 0xF61BFBE5, 0xF8100006);
	r7 = D(r7, s0_2_2, 0xFFFA04FC, 0xF9010A01, 0xF3FB0403, 0xF6FB0600);
	r0 = D(r0, s1_0_0, 0xF7F4FEFA, 0xF3FC1609, 0xFDFC04FB, 0x0A030BFA);
	r1 = D(r1, s1_0_0, 0x0102F302, 0x09FEF4FB, 0x01F8130D, 0x01060115);
	r2 = D(r2, s1_0_0, 0xFCF51A00, 0x040609FF, 0xFFFDF6F6, 0x07030FFD);
	r3 = D(r3, s1_0_0, 0x16FB0EE7, 0x0D080C11, 0x06010C01, 0x14FFFB01);
	r4 = D(r4, s1_0_0, 0xFD04130C, 0x00041C0C, 0x04FA0B09, 0x01F91809);
	r5 = D(r5, s1_0_0, 0x05FB0D08, 0x0903FCE8, 0xFCFC04FA, 0xFEF8E7EC);
	r6 = D(r6, s1_0_0, 0x00FAF0FB, 0x010503FA, 0xF8F10A06, 0xFAFCFB03);
	r7 = D(r7, s1_0_0, 0x0305050B, 0x0513FBFA, 0xFEFE07FE, 0xFBF70A0C);
	r0 = D(r0, s1_0_1, 0xFF0BFE10, 0x0911E80D, 0x0D15070F, 0x05030CEA);
	r1 = D(r1, s1_0_1, 0x00FEF3F6, 0x04F4F7ED, 0xFE050AF6, 0x0BFD10FB);
	r2 = D(r2, s1_0_1, 0x0A072012, 0x0200FC13, 0x06FEF104, 0xFCF904E8);
	r3 = D(r3, s1_0_1, 0x1A060E15, 0x0C0C10F4, 0x00FF0CE9, 0x10FE0CF3);
	r4 = D(r4, s1_0_1, 0x040414F3, 0xFEED04FA, 0x0A02F600, 0x15F50B10);
	r5 = D(r5, s1_0_1, 0x01FE0EFC, 0xFE0700F2, 0x01F4FB02, 0xEEE8ECFB);
	r6 = D(r6, s1_0_1, 0x01000006, 0xFFF401D2, 0x01FE0403, 0xF9EDF1D4);
	r7 = D(r7, s1_0_1, 0x03060509, 0x050C0017, 0x04FE0DF7, 0xF7F41617);
	r0 = D(r0, s1_0_2, 0x06F9F70A, 0x0CF70D05, 0x02F700FB, 0xFFFD0BF9);
	r1 = D(r1, s1_0_2, 0x00FFF901, 0x0B04FC11, 0x04010AFC, 0xFDFB1401);
	r2 = D(r2, s1_0_2, 0xF7ED2BF0, 0x09000AFA, 0x06FCFEFB, 0x05040BFC);
	r3 = D(r3, s1_0_2, 0x100104F3, 0x12FDFD0F, 0x03FD14F7, 0x050AFD06);
	r4 = D(r4, s1_0_2, 0xFEF911F2, 0xF9FF11F2, 0x02FDF800, 0x09FC16FC);
	r5 = D(r5, s1_0_2, 0x05010F07, 0xF801EFE8, 0x01FC05FA, 0xF9FBCBF4);
	r6 = D(r6, s1_0_2, 0x0BFBF30D, 0x0906F6F8, 0xE1F30537, 0x08F30502);
	r7 = D(r7, s1_0_2, 0xF70A0EF0, 0xFA0AF7FD, 0x07FE0DF5, 0xFBF41713);
	r0 = D(r0, s1_1_0, 0xF700F817, 0xF5F3061A, 0x060C0510, 0x08020C00);
	r1 = D(r1, s1_1_0, 0xFEE4E700, 0xF8EFF702, 0xFEED17E6, 0xEDFC04E0);
	r2 = D(r2, s1_1_0, 0xF7071810, 0x0603FFE1, 0xF90702F7, 0x02F01CEF);
	r3 = D(r3, s1_1_0, 0xFE0016E8, 0x09020EFA, 0xF8000FF9, 0x111C10E8);
	r4 = D(r4, s1_1_0, 0x02F918EB, 0x00EB1BE9, 0x01EF0BBF, 0x09F922EF);
	r5 = D(r5, s1_1_0, 0xFDF81113, 0xEF09FFE4, 0xFCF503F1, 0xFAE3F5EA);
	r6 = D(r6, s1_1_0, 0xFC12EDFD, 0x0005FBFA, 0xF8F5F9FC, 0xF0FBFAFF);
	r7 = D(r7, s1_1_0, 0x00FD1507, 0xFF17F800, 0x070509D9, 0xF80107FB);
	r0 = D(r0, s1_1_1, 0x0FF5EBE0, 0xECFEEDF7, 0x0321F8FF, 0xFADD0BE4);
	r1 = D(r1, s1_1_1, 0xFDD4EF12, 0x0D150715, 0xF5FF151A, 0xFBCF0FF1);
	r2 = D(r2, s1_1_1, 0x01FE1EF3, 0xF0F10CED, 0x06010AE0, 0x08E3FD0C);
	r3 = D(r3, s1_1_1, 0x16D914DC, 0xFF340A0D, 0xF7151BFF, 0xFDE50029);
	r4 = D(r4, s1_1_1, 0xEEB519F5, 0xEBA310F7, 0x0C2B00EE, 0xE8DB03CF);
	r5 = D(r5, s1_1_1, 0x08181D19, 0xFA130CD6, 0x09F0FA04, 0x10E5C7ED);
	r6 = D(r6, s1_1_1, 0x03370D14, 0x0A24F1E8, 0x0CF6F6F6, 0x033315E9);
	r7 = D(r7, s1_1_1, 0xF3F31026, 0xF203EBE8, 0xEDB502F9, 0xFFEC0906);
	r0 = D(r0, s1_1_2, 0x08EFF20C, 0x04FA1007, 0x04FDF904, 0x09FB03F3);
	r1 = D(r1, s1_1_2, 0x0CE90109, 0x03E8F5FF, 0xFEFE0708, 0xFD0D1EF4);
	r2 = D(r2, s1_1_2, 0xFBE915F4, 0x030C09F7, 0x06FBF605, 0xF902FC01);
	r3 = D(r3, s1_1_2, 0x060FF7DA, 0xF8190405, 0x02021B08, 0x052404EF);
	r4 = D(r4, s1_1_2, 0xFEF119FB, 0x09041DF8, 0x0200FB06, 0x140E2BFA);
	r5 = D(r5, s1_1_2, 0x03031000, 0x05F9F3F6, 0x0A020C00, 0xFCE0F404);
	r6 = D(r6, s1_1_2, 0xF505F7FA, 0x02E6F615, 0x12E1DF2D, 0x0405F205);
	r7 = D(r7, s1_1_2, 0xF415130B, 0xFB07F9FF, 0x010514FD, 0xF5D310EE);
	r0 = D(r0, s1_2_0, 0xF9EFF403, 0xFEEC0806, 0x05F80301, 0x11F8F9EC);
	r1 = D(r1, s1_2_0, 0xF506FA12, 0xE904FD05, 0xFD030C12, 0xFB0B2E0E);
	r2 = D(r2, s1_2_0, 0x0EF61AFA, 0xF701F6EF, 0xF515FFF8, 0xF8E504DE);
	r3 = D(r3, s1_2_0, 0x0D070CF5, 0x1C01F705, 0x03FF1801, 0x24F801F5);
	r4 = D(r4, s1_2_0, 0xFFF4090D, 0x09F5130B, 0xF3F7F80E, 0x09F12C12);
	r5 = D(r5, s1_2_0, 0x0000100E, 0xFB17FA02, 0xFDF20F0C, 0xFD14C7F3);
	r6 = D(r6, s1_2_0, 0x0200FFEC, 0xF4F2F1E5, 0xF817110E, 0x09000E04);
	r7 = D(r7, s1_2_0, 0xFAFE0706, 0x040FFBFF, 0x07F90203, 0x04F11309);
	r0 = D(r0, s1_2_1, 0xED29F80C, 0xFA080FF9, 0x002007F9, 0x040706F5);
	r1 = D(r1, s1_2_1, 0xFF0D0FE5, 0xF8FA02E6, 0xFE0C13FB, 0xFCBE2BFD);
	r2 = D(r2, s1_2_1, 0x08E02802, 0x0BE8020C, 0xFAE5FA06, 0xF21110FE);
	r3 = D(r3, s1_2_1, 0x00EAF915, 0x0ECDF719, 0x02061C02, 0x1B02F8F2);
	r4 = D(r4, s1_2_1, 0x0AEB18FA, 0x0ACD19F9, 0x00EAFF0A, 0x0A8C181D);
	r5 = D(r5, s1_2_1, 0x03000FFE, 0x0604F70A, 0xFCFE0815, 0x0303DB06);
	r6 = D(r6, s1_2_1, 0xFD10F518, 0xF013FBEC, 0xEB2D1013, 0xFEF1FB04);
	r7 = D(r7, s1_2_1, 0xFC0D06FD, 0xFD3901FB, 0x03F10A00, 0xFAD5081C);
	r0 = D(r0, s1_2_2, 0xFF010E02, 0xFEF11902, 0xF80A03F7, 0x03FD01F9);
	r1 = D(r1, s1_2_2, 0xFFFF0A05, 0xFB0A010F, 0xFE040403, 0x0AE31902);
	r2 = D(r2, s1_2_2, 0x04EE1E03, 0x0BF3090F, 0x01F9F900, 0xF9F3160C);
	r3 = D(r3, s1_2_2, 0x04000008, 0x0909F2FA, 0x01F30804, 0x020AFDFE);
	r4 = D(r4, s1_2_2, 0x06F31000, 0x03FB18F9, 0xFC05FAFE, 0x13E52D03);
	r5 = D(r5, s1_2_2, 0x03F80202, 0x08F2F5FB, 0xF7F207FC, 0xFAFF0EF8);
	r6 = D(r6, s1_2_2, 0x0304FD09, 0xFE05F8F9, 0x000D0706, 0xF911F2FC);
	r7 = D(r7, s1_2_2, 0xF80204F6, 0xFC09FBFB, 0xFFFE0EF9, 0xF7E40710);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x01F80900, 0xF6060EF7, 0xF9070EFD, 0x0805FD06);
	r1 = D(r1, s0_0_0, 0x02F4F4FC, 0xF8F7FFFE, 0x08F9EF04, 0xFE0FF105);
	r2 = D(r2, s0_0_0, 0xFE160204, 0xFD0C070E, 0xFC01FCFA, 0x09FC0EF9);
	r3 = D(r3, s0_0_0, 0x0101DF0A, 0xFA0401FC, 0x0606FF02, 0xF808F10A);
	r4 = D(r4, s0_0_0, 0xF6000A0A, 0x0309FF03, 0x04F1EF05, 0xFC0DF80C);
	r5 = D(r5, s0_0_0, 0x01FE02FF, 0xF7070302, 0xF2020206, 0x010CF904);
	r6 = D(r6, s0_0_0, 0xEF0C00F8, 0x01FD0C04, 0xF7030819, 0xFE01150A);
	r7 = D(r7, s0_0_0, 0x0300F302, 0xFF07F803, 0x03FA0403, 0x000D0204);
	r0 = D(r0, s0_0_1, 0x100B1BF6, 0x080A1904, 0xF31102FA, 0x15050CFE);
	r1 = D(r1, s0_0_1, 0xFFF70D03, 0xEDFD02FD, 0xF5F6F8FD, 0xFEF7000A);
	r2 = D(r2, s0_0_1, 0xF218F1F8, 0x12F808FE, 0x0500FEFE, 0xE5F90E0D);
	r3 = D(r3, s0_0_1, 0xF210EF05, 0xDB07FE01, 0xFA00F007, 0xFEEFF811);
	r4 = D(r4, s0_0_1, 0x23FC0DFB, 0xE8FCE80B, 0xED08FCFA, 0xF80EF600);
	r5 = D(r5, s0_0_1, 0xF40801FC, 0x0B01FE01, 0x08F8FB03, 0x01ECF0FE);
	r6 = D(r6, s0_0_1, 0xDB0A0405, 0xCCF0F70C, 0xF5FE0408, 0xD8EF0B0E);
	r7 = D(r7, s0_0_1, 0x01000103, 0x06FC0A02, 0x12FBFE03, 0xF00F1CF6);
	r0 = D(r0, s0_0_2, 0x03050405, 0xF8FF0807, 0xFA0103FE, 0x0CF0FF09);
	r1 = D(r1, s0_0_2, 0x15ED0507, 0x25ECFE05, 0x05FE04FF, 0xFC090AFA);
	r2 = D(r2, s0_0_2, 0xD728E6F5, 0xFF0FFEFE, 0xFD0BFDFF, 0xFD0D02F7);
	r3 = D(r3, s0_0_2, 0xF5F00107, 0x11F9F901, 0xF7FAFA04, 0x0DF3F7FE);
	r4 = D(r4, s0_0_2, 0xFD0004FE, 0xF6F80401, 0x00F60100, 0xEB060203);
	r5 = D(r5, s0_0_2, 0x090200FE, 0xFF080300, 0xFFF9FBFE, 0x18FBFF06);
	r6 = D(r6, s0_0_2, 0xFDFD0407, 0xEEF602FD, 0x34F4000A, 0xF2EB06FE);
	r7 = D(r7, s0_0_2, 0x0AF30100, 0x0B0C01FA, 0x08FA0203, 0x0A21FAF2);
	r0 = D(r0, s0_1_0, 0xFA0A1B0C, 0x000E1218, 0xF300F6F8, 0xF705FE02);
	r1 = D(r1, s0_1_0, 0x00FFDEEF, 0x0210DEDE, 0x130DD3E2, 0x0613C8F6);
	r2 = D(r2, s0_1_0, 0xFC17FA08, 0x1416EF0A, 0xF70914FD, 0xEC14070D);
	r3 = D(r3, s0_1_0, 0x00FEF602, 0x0AF5F1F1, 0x03FDF600, 0x0112DDE5);
	r4 = D(r4, s0_1_0, 0x060CF505, 0xF507F004, 0x02F61C16, 0x080002F2);
	r5 = D(r5, s0_1_0, 0xFC041F05, 0x0A07F3FF, 0xFB12ECF7, 0x001309F0);
	r6 = D(r6, s0_1_0, 0xF513F91C, 0x03070F20, 0xF032F140, 0x09F9F910);
	r7 = D(r7, s0_1_0, 0xFF03E609, 0xFC01FD09, 0x0815E2EE, 0x0000FBFD);
	r0 = D(r0, s0_1_1, 0x03FEE506, 0x20EBF613, 0x1CD6D80A, 0xFC0BE9F6);
	r1 = D(r1, s0_1_1, 0x0FE21306, 0xF3F2EBF5, 0xFA1000FB, 0x070AF406);
	r2 = D(r2, s0_1_1, 0x23F6D0DB, 0x090B12FA, 0xE11C0CF4, 0xFFF30404);
	r3 = D(r3, s0_1_1, 0xEFE21205, 0x0203F706, 0x0F311C0E, 0x0FE607F3);
	r4 = D(r4, s0_1_1, 0x04F01508, 0xFBFB0FFE, 0xD506F700, 0x062CE808);
	r5 = D(r5, s0_1_1, 0xE0EDDD02, 0x0B07F3FC, 0x00191E06, 0x25D4D613);
	r6 = D(r6, s0_1_1, 0x0E04EC0F, 0xD801DB0E, 0x0AF2CBE3, 0xEF27E1FB);
	r7 = D(r7, s0_1_1, 0xF8FBE308, 0x0DECEF06, 0x1AFFEA08, 0x14F511D1);
	r0 = D(r0, s0_1_2, 0xFDE7F708, 0x0BDCF1FF, 0xFBFAFD09, 0x07DA0003);
	r1 = D(r1, s0_1_2, 0xF60111FF, 0xEF1D1300, 0xFF1007FB, 0x07FCFCFC);
	r2 = D(r2, s0_1_2, 0xE608E3EB, 0xFDFDFBF7, 0x061300FB, 0x0B0809F3);
	r3 = D(r3, s0_1_2, 0xF00AECFF, 0x0010FFF8, 0x08EBF803, 0xF305EF04);
	r4 = D(r4, s0_1_2, 0x00F8EDFE, 0x09F01402, 0x050301FE, 0x0FE2FE05);
	r5 = D(r5, s0_1_2, 0xF40C02F7, 0xF81C10FB, 0xF7000406, 0xF0050911);
	r6 = D(r6, s0_1_2, 0xF809F5FF, 0xE6D3FD18, 0xF9FEF40A, 0xEDE50309);
	r7 = D(r7, s0_1_2, 0x01F9F200, 0x110B0403, 0x0E02FD00, 0xF91811E8);
	r0 = D(r0, s0_2_0, 0xFA07FD0D, 0xF805FD08, 0xF9FCF9F8, 0xFD0DF710);
	r1 = D(r1, s0_2_0, 0x0707EAFE, 0x0301EF0C, 0x0004FDF7, 0x040CF40F);
	r2 = D(r2, s0_2_0, 0xFB16ECFF, 0x0AFD0A03, 0xFE010505, 0xF2FB0318);
	r3 = D(r3, s0_2_0, 0xFA0CEE01, 0x0AF4F4E6, 0xF90BF806, 0x000CDD02);
	r4 = D(r4, s0_2_0, 0x00020207, 0x00010D0B, 0x030CFE08, 0xFE0B0AFB);
	r5 = D(r5, s0_2_0, 0xFA080906, 0xFD0DF900, 0xFC03FCFA, 0x170AF8FC);
	r6 = D(r6, s0_2_0, 0x0CFEF00B, 0x0503F60E, 0xFDDA37DA, 0x06F70AF4);
	r7 = D(r7, s0_2_0, 0x0404F507, 0xFB02FE00, 0xFF01F8FB, 0xF408FBE9);
	r0 = D(r0, s0_2_1, 0xFDF3FCFA, 0xF40106FF, 0xFCFFF5F3, 0xFC07EF02);
	r1 = D(r1, s0_2_1, 0xFD22EF07, 0xF518FF07, 0xFF09F8FE, 0xF60420FD);
	r2 = D(r2, s0_2_1, 0x010EF4E4, 0xF1140705, 0xFEF70D01, 0xEDFAFE06);
	r3 = D(r3, s0_2_1, 0xFAFDF7FD, 0x09F4FC00, 0xF6FEF0F9, 0x0519F4FC);
	r4 = D(r4, s0_2_1, 0xFFF40A0A, 0xEE060E00, 0xFAFE0C07, 0xE904FEE3);
	r5 = D(r5, s0_2_1, 0xF50C06FF, 0xFC0BFD06, 0x07F4F401, 0xFA0E080B);
	r6 = D(r6, s0_2_1, 0x1409F6F1, 0x080D0309, 0xEDEE03EB, 0x02F50C0B);
	r7 = D(r7, s0_2_1, 0xF510ED01, 0xFE0FF2FD, 0x0305FE00, 0xF3F4F7E0);
	r0 = D(r0, s0_2_2, 0xF5FBF700, 0xFA010800, 0xFA07FDFC, 0xFFFEF303);
	r1 = D(r1, s0_2_2, 0xFC030502, 0xFEF90A01, 0xFC0808FB, 0xFB0302FA);
	r2 = D(r2, s0_2_2, 0xF804F6FC, 0x0EF001F8, 0x0604FFFD, 0xFD1008F4);
	r3 = D(r3, s0_2_2, 0x07EE020B, 0x02F8FD08, 0x03F9F9FF, 0x09010904);
	r4 = D(r4, s0_2_2, 0xFFF903FF, 0x020AFCFC, 0x02F00404, 0x0AF40207);
	r5 = D(r5, s0_2_2, 0x01FF03FD, 0xFDFB06FF, 0xF9FCF8FD, 0xFE13F4FE);
	r6 = D(r6, s0_2_2, 0xFC04F4F7, 0xF806EE03, 0x1ADD0C14, 0x08FB0801);
	r7 = D(r7, s0_2_2, 0x020AF8FC, 0xFC06F5FA, 0xFD09FE05, 0xFC01F9FA);
	r0 = D(r0, s1_0_0, 0x020203E4, 0x0205F5F2, 0x0CEFF604, 0xF9000405);
	r1 = D(r1, s1_0_0, 0x00112A08, 0x0909230B, 0x00050FFC, 0x00030CF5);
	r2 = D(r2, s1_0_0, 0x09F7EB00, 0x0AECF302, 0x05F6FD03, 0x00E4F611);
	r3 = D(r3, s1_0_0, 0xEC0E00FB, 0x00FB0AF6, 0xFA100CFB, 0xFF0B01FF);
	r4 = D(r4, s1_0_0, 0x0AEAFB01, 0xF80914F9, 0xEBF709F2, 0xFEFD0AE5);
	r5 = D(r5, s1_0_0, 0xFB030BFA, 0xFBF60000, 0x06FC0C0E, 0x1C111F0E);
	r6 = D(r6, s1_0_0, 0xF8F8F701, 0xF0F6FD08, 0xF4EE07D0, 0xEEDAED05);
	r7 = D(r7, s1_0_0, 0x051015ED, 0xFC04FE00, 0x0B000CFC, 0x01F7FEFF);
	r0 = D(r0, s1_0_1, 0x07F0FFF7, 0xF9F0FB06, 0xF0F9080B, 0x04F915FD);
	r1 = D(r1, s1_0_1, 0x0BF6FBE8, 0xFAFDEDFB, 0xFD0105F6, 0xF009FAFD);
	r2 = D(r2, s1_0_1, 0xE90810F9, 0x0608F1F5, 0x03000202, 0xFF070D11);
	r3 = D(r3, s1_0_1, 0xE9FC0705, 0xFAF7F801, 0xF6060AF1, 0x0202EEF2);
	r4 = D(r4, s1_0_1, 0xF70400F0, 0xFC06FBF1, 0xF9010BFD, 0xE701FCF9);
	r5 = D(r5, s1_0_1, 0xF9F70BF6, 0xEFFF0103, 0x0202FAFE, 0x12150B0C);
	r6 = D(r6, s1_0_1, 0xF309F009, 0xFF08FC00, 0xF40BF71C, 0xEE0FF90D);
	r7 = D(r7, s1_0_1, 0xFCF5FFF6, 0x0401F901, 0xF70406F6, 0x07FA12F9);
	r0 = D(r0, s1_0_2, 0xFA07F603, 0xF603FA0D, 0xF202F607, 0xF30F0DFC);
	r1 = D(r1, s1_0_2, 0x00FCFD01, 0x03F4F9F5, 0xFF01F501, 0xF409FDF9);
	r2 = D(r2, s1_0_2, 0xEEF916F0, 0x120000F8, 0x0DF813FB, 0xFEF800F7);
	r3 = D(r3, s1_0_2, 0xFD09FF04, 0xFA0601FD, 0xF50206F7, 0xFE10FD01);
	r4 = D(r4, s1_0_2, 0xEC0DF9FF, 0x040807F7, 0x0705F2FC, 0xF113EAFF);
	r5 = D(r5, s1_0_2, 0xFBFFFDFD, 0x07FE0EFF, 0x05010EFA, 0x180B10FE);
	r6 = D(r6, s1_0_2, 0xFDFEFB03, 0x05FF19FD, 0xFA32F4F3, 0x10FCFAFD);
	r7 = D(r7, s1_0_2, 0xF90605FD, 0xF60307FF, 0xFB0500FB, 0xEFFD0B02);
	r0 = D(r0, s1_1_0, 0x0EF1FDF5, 0x10CC10FF, 0xF00701FF, 0x05FC0B08);
	r1 = D(r1, s1_1_0, 0xFE05F711, 0x00F9F413, 0xF91D0200, 0xEE0D04F0);
	r2 = D(r2, s1_1_0, 0xE603F80A, 0xE8140E0D, 0x02F4EB00, 0xFDBF03EF);
	r3 = D(r3, s1_1_0, 0x010002FF, 0x0D0C22FD, 0xF80E0E01, 0xFD0618FB);
	r4 = D(r4, s1_1_0, 0x071508FA, 0x02F60803, 0x00FE1202, 0x01FF17EA);
	r5 = D(r5, s1_1_0, 0x05FE1001, 0xF5F7EFFD, 0xEC00F2F8, 0x0105F9FF);
	r6 = D(r6, s1_1_0, 0xED08FDFF, 0xFAE203FE, 0x1DF1C5E9, 0xE00B0B09);
	r7 = D(r7, s1_1_0, 0xFD1012FA, 0xF1F803F7, 0x051604FA, 0x070F0AFF);
	r0 = D(r0, s1_1_1, 0xE3F1F702, 0xEBDAF4EF, 0xF6F7F5FD, 0xFF15F8F7);
	r1 = D(r1, s1_1_1, 0xC30EFD09, 0xD10406FD, 0xED0E07F3, 0xFFFD0B00);
	r2 = D(r2, s1_1_1, 0x0808FFE2, 0x0119FFED, 0xF30BFE13, 0xED170EFA);
	r3 = D(r3, s1_1_1, 0x0C1C39FA, 0xF4EEF8FA, 0xF8EFFCFD, 0xDEFE1FF8);
	r4 = D(r4, s1_1_1, 0xFDED0FFF, 0x2414FEF2, 0xE0F5F1FE, 0x011209F3);
	r5 = D(r5, s1_1_1, 0xFAFEFFFC, 0xED06FB00, 0xD8040502, 0x06131B29);
	r6 = D(r6, s1_1_1, 0xECFDFDF9, 0xEBE3ED14, 0xF3F9BFDA, 0xCFECE9E6);
	r7 = D(r7, s1_1_1, 0xF015F608, 0xFD03050C, 0x0803F8FE, 0x081B12EC);
	r0 = D(r0, s1_1_2, 0x0AFB07F4, 0x0AE901EE, 0x05030AF4, 0x02FB040B);
	r1 = D(r1, s1_1_2, 0xDE10F706, 0xEE1C00E7, 0xFB05FD06, 0xFF010402);
	r2 = D(r2, s1_1_2, 0x0CF50CF7, 0x16011207, 0x0EF8020D, 0x0AFA03FF);
	r3 = D(r3, s1_1_2, 0xF4090306, 0xF5FE0DF7, 0x0CFC0DFE, 0xF100F0F5);
	r4 = D(r4, s1_1_2, 0x05FD0209, 0x0FFEFD04, 0xFA0AFE02, 0x0400ECF0);
	r5 = D(r5, s1_1_2, 0xF3010304, 0xEB000DFE, 0x0AFDF609, 0x1500FFF4);
	r6 = D(r6, s1_1_2, 0xEE20FBF5, 0x0F040410, 0x1FF7E4D4, 0x07F7FF0B);
	r7 = D(r7, s1_1_2, 0x1006FFF7, 0x13F711FA, 0x0B0007FD, 0xED06F9F6);
	r0 = D(r0, s1_2_0, 0x08FDFFF5, 0x02F9F612, 0xF5FF05FE, 0xFE010004);
	r1 = D(r1, s1_2_0, 0xF305021A, 0xEC03FA07, 0xFBFB0402, 0x02FF0DF9);
	r2 = D(r2, s1_2_0, 0xFAF4FD09, 0xF7F6F109, 0xF0FBF7FE, 0xF9E3F0FF);
	r3 = D(r3, s1_2_0, 0xF1FCFC04, 0x04041BF1, 0xFAFD0305, 0xFFFD01F7);
	r4 = D(r4, s1_2_0, 0x010603FF, 0x04030001, 0xF609000A, 0xFEFBFEF4);
	r5 = D(r5, s1_2_0, 0x02040B06, 0xFFFE0205, 0xFC060CF7, 0x00E815EF);
	r6 = D(r6, s1_2_0, 0x06150BFF, 0x021F021D, 0xDA071727, 0x010E0306);
	r7 = D(r7, s1_2_0, 0xFBFF0401, 0xFF001406, 0xFFFF02FD, 0xFFF70AFE);
	r0 = D(r0, s1_2_1, 0xEFFEF7F4, 0xF90901E0, 0xFAF6040B, 0x02FD00FB);
	r1 = D(r1, s1_2_1, 0xF2EF0010, 0x01F70CEB, 0x0801060D, 0xF30D0106);
	r2 = D(r2, s1_2_1, 0xFEF7FCFD, 0xFDFE04E5, 0xE2F707F8, 0x000310FF);
	r3 = D(r3, s1_2_1, 0x000AFD00, 0xFFFFF115, 0xFC08F0FC, 0x0F0E0200);
	r4 = D(r4, s1_2_1, 0x050C0512, 0x0C100407, 0xF900EE02, 0x0312FE10);
	r5 = D(r5, s1_2_1, 0xFD06FCF7, 0xF7F90600, 0xF1FC080C, 0xF9E4070B);
	r6 = D(r6, s1_2_1, 0xFBFDFEF3, 0x00FD00EA, 0xF60D09F2, 0xEFFF0112);
	r7 = D(r7, s1_2_1, 0x0105FD04, 0x0E080D01, 0x04FFFC10, 0x02FB0508);
	r0 = D(r0, s1_2_2, 0x0505FEFE, 0x080E0017, 0xFE03070A, 0xF3040404);
	r1 = D(r1, s1_2_2, 0xFEF412D6, 0x0CF417D4, 0xFFFF03F8, 0x0203F70F);
	r2 = D(r2, s1_2_2, 0x0B0AED0B, 0x1BEEF529, 0xF9FC01F8, 0xFD0307F4);
	r3 = D(r3, s1_2_2, 0xF500F609, 0x03F60602, 0x05010010, 0xE30608FC);
	r4 = D(r4, s1_2_2, 0x04FDFE11, 0x01FDF60B, 0xF3010200, 0x1A04F01B);
	r5 = D(r5, s1_2_2, 0x04030201, 0xFE0201F7, 0xFD05F7F5, 0xFA0B09DD);
	r6 = D(r6, s1_2_2, 0x10EBFC0C, 0xEE090AEC, 0x1BF8FB11, 0xF706F7F9);
	r7 = D(r7, s1_2_2, 0xFA0303FD, 0xF8080701, 0x020300FF, 0x0DFDF702);
	s0_0_0 = G[6][xy.y+0][xy.x+0]; s0_0_1 = G[6][xy.y+0][xy.x+1];
	s0_0_2 = G[6][xy.y+0][xy.x+2]; s0_1_0 = G[6][xy.y+1][xy.x+0];
	s0_1_1 = G[6][xy.y+1][xy.x+1]; s0_1_2 = G[6][xy.y+1][xy.x+2];
	s0_2_0 = G[6][xy.y+2][xy.x+0]; s0_2_1 = G[6][xy.y+2][xy.x+1];
	s0_2_2 = G[6][xy.y+2][xy.x+2]; s1_0_0 = G[7][xy.y+0][xy.x+0];
	s1_0_1 = G[7][xy.y+0][xy.x+1]; s1_0_2 = G[7][xy.y+0][xy.x+2];
	s1_1_0 = G[7][xy.y+1][xy.x+0]; s1_1_1 = G[7][xy.y+1][xy.x+1];
	s1_1_2 = G[7][xy.y+1][xy.x+2]; s1_2_0 = G[7][xy.y+2][xy.x+0];
	s1_2_1 = G[7][xy.y+2][xy.x+1]; s1_2_2 = G[7][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x08FF01F4, 0x0105FFFB, 0xF7FA0203, 0xF8F5F8F8);
	r1 = D(r1, s0_0_0, 0xFD0B0404, 0xFE021108, 0xF703F403, 0xF1070006);
	r2 = D(r2, s0_0_0, 0x1BF7EEFA, 0x09FAF904, 0x100302FB, 0xF1FEFD0C);
	r3 = D(r3, s0_0_0, 0x0102FAFE, 0xF5FBFF11, 0xF9FDFB00, 0xFFE9E7FC);
	r4 = D(r4, s0_0_0, 0xFBF8F1FC, 0xEDF8FE01, 0xF5F8F0F8, 0xF705EC01);
	r5 = D(r5, s0_0_0, 0x03FEF8FE, 0x0EFCFEFD, 0x030B0003, 0xFB1A07EA);
	r6 = D(r6, s0_0_0, 0x0605FF13, 0x08FF0313, 0x06FC07F7, 0x05F50117);
	r7 = D(r7, s0_0_0, 0xF20401FE, 0xF9FCFA04, 0xF906FEFB, 0x04FFF9FE);
	r0 = D(r0, s0_0_1, 0xF1F71008, 0xEAF4FE11, 0xDAEDF102, 0xEAED0400);
	r1 = D(r1, s0_0_1, 0x0B17FE09, 0x210BEC03, 0x040EFD04, 0x080AE2FB);
	r2 = D(r2, s0_0_1, 0xE8F1EEF7, 0x01FBF6FD, 0xFEFB01F8, 0x0809E2F1);
	r3 = D(r3, s0_0_1, 0xDEF9060A, 0x0BFC0313, 0xFE0B080A, 0xF3FEF406);
	r4 = D(r4, s0_0_1, 0x10E6E5F5, 0x220DEF04, 0x0003F909, 0xFC06EE08);
	r5 = D(r5, s0_0_1, 0xF9FFFF01, 0xDCEEFAF7, 0x0F09FAF6, 0xF42DFDFA);
	r6 = D(r6, s0_0_1, 0x13FDFCEE, 0x1A19F1FB, 0xE8F30909, 0x1BFC0805);
	r7 = D(r7, s0_0_1, 0x0909F507, 0xEDF1F302, 0x120FF9FA, 0xF5EFFAF3);
	r0 = D(r0, s0_0_2, 0x0BFDF709, 0x13FDEDFA, 0xF504E9FC, 0xFAF7FFFD);
	r1 = D(r1, s0_0_2, 0x08FD080D, 0x16020AFD, 0x02040707, 0x01FBF6F8);
	r2 = D(r2, s0_0_2, 0xF2020313, 0xF7FFF4FA, 0xFFFC0B06, 0xFDF80709);
	r3 = D(r3, s0_0_2, 0x010F0003, 0x0D04F2EB, 0x010A04FA, 0xFCF10D02);
	r4 = D(r4, s0_0_2, 0x08FBF5F9, 0xF702FFF3, 0x0B0803FB, 0xFB07F9ED);
	r5 = D(r5, s0_0_2, 0x01010602, 0xF5F1F601, 0xF9010C09, 0xEC0B02E6);
	r6 = D(r6, s0_0_2, 0x100102FA, 0xFE02FD07, 0x0DF7FF1E, 0x1104ED00);
	r7 = D(r7, s0_0_2, 0xFC010706, 0xF6F80001, 0x010600FF, 0xEDE61316);
	r0 = D(r0, s0_1_0, 0xF1FE0E01, 0xF9030208, 0xF1110310, 0x05F90BFF);
	r1 = D(r1, s0_1_0, 0x130906F9, 0x0C080007, 0x011A03FA, 0x0C2AFF02);
	r2 = D(r2, s0_1_0, 0xFC1102F5, 0xFB0A0C0C, 0x03F6F700, 0x81F3F5E0);
	r3 = D(r3, s0_1_0, 0xFDE9FDFB, 0xE6F1FEF2, 0xFEFEF5FC, 0xECFDFDF9);
	r4 = D(r4, s0_1_0, 0xF5FCFFFA, 0x0CF402FA, 0xE70105F7, 0x01FF04F9);
	r5 = D(r5, s0_1_0, 0xFBF0F5FB, 0x1AFC0F0A, 0xFB070D16, 0x1714FAF1);
	r6 = D(r6, s0_1_0, 0x03FFFB14, 0xEFF30312, 0x05F9C42A, 0x02FD0302);
	r7 = D(r7, s0_1_0, 0xEDF8F6F0, 0xFBEF020D, 0xFE0AFCFB, 0xF509FFFE);
	r0 = D(r0, s0_1_1, 0xD7F3F80E, 0x131EF3F6, 0xD902DE0F, 0x041504FF);
	r1 = D(r1, s0_1_1, 0x01FFFF01, 0xA3D90106, 0x14ED0507, 0x431AF7FE);
	r2 = D(r2, s0_1_1, 0x132004EE, 0x4FC9F5F3, 0xC7F000EF, 0x1815E8FB);
	r3 = D(r3, s0_1_1, 0xB4DEFE11, 0xDBF1F411, 0x19CC0C06, 0xF304150E);
	r4 = D(r4, s0_1_1, 0x0B05EE07, 0x4BFB0409, 0xE318FF0A, 0x39190D0C);
	r5 = D(r5, s0_1_1, 0xFA4EF2FA, 0xEED106FE, 0x27B001FA, 0x01EAEBF4);
	r6 = D(r6, s0_1_1, 0xC7C9050F, 0xBCE705EA, 0x95E5A6F7, 0x81DEF3FE);
	r7 = D(r7, s0_1_1, 0x151DFB0D, 0xFC070702, 0x4C33F903, 0x1E04FF03);
	r0 = D(r0, s0_1_2, 0x1610FDEB, 0x131002F8, 0xFC0EF8E4, 0x0EF606F8);
	r1 = D(r1, s0_1_2, 0xFCF601FF, 0xFCFFEFE7, 0xF7F5020B, 0xFFFE070B);
	r2 = D(r2, s0_1_2, 0xFB151B14, 0x0700F512, 0xECFBFB0F, 0xFCFD0F08);
	r3 = D(r3, s0_1_2, 0xE2F30EE7, 0x0706EAE2, 0x120C0A05, 0xCCEF0808);
	r4 = D(r4, s0_1_2, 0x04FD0711, 0x0DFD050E, 0x0D09FE0E, 0x07FC05F4);
	r5 = D(r5, s0_1_2, 0xFA040205, 0xEDF00405, 0x0E06FD0A, 0xFBFBFADA);
	r6 = D(r6, s0_1_2, 0xF003E2EE, 0x090DEFF9, 0xF81AE2B8, 0x0B0A00E2);
	r7 = D(r7, s0_1_2, 0xF8FEF80E, 0xFFEE0403, 0x0B00050B, 0xF9F9FE0A);
	r0 = D(r0, s0_2_0, 0x02010DFF, 0xFDFE0AFF, 0x06090403, 0x05FE02FF);
	r1 = D(r1, s0_2_0, 0x18080703, 0x110CFE0B, 0x0201F9FB, 0xDAF8F8F6);
	r2 = D(r2, s0_2_0, 0x02FB000B, 0x19FE0008, 0x0C04F903, 0xDBFB0204);
	r3 = D(r3, s0_2_0, 0x0002F7FD, 0xEDFAF4EC, 0xF8FC0300, 0xCFEDF201);
	r4 = D(r4, s0_2_0, 0xFEFBF9F3, 0xFBF703F1, 0x09FCF9F5, 0xF404F2EA);
	r5 = D(r5, s0_2_0, 0xFAFAFA01, 0x0A04010D, 0x0802F501, 0xF203F7FB);
	r6 = D(r6, s0_2_0, 0xEFFEECFF, 0xFD0009F7, 0x0EDD0E15, 0xE9FC04FE);
	r7 = D(r7, s0_2_0, 0xFBFE05F8, 0x03F7FD05, 0x0409F5FA, 0x02080400);
	r0 = D(r0, s0_2_1, 0x110EFA01, 0x0C07F701, 0xF4080505, 0xEEF2FE09);
	r1 = D(r1, s0_2_1, 0x00FF08F6, 0xFBF805F7, 0xF1FE0C03, 0xF9E8F30A);
	r2 = D(r2, s0_2_1, 0x0CFF10F6, 0x050004F0, 0x030202FE, 0x01F9EF00);
	r3 = D(r3, s0_2_1, 0x06011004, 0xF0041008, 0x02050906, 0xFCFA060C);
	r4 = D(r4, s0_2_1, 0xF2FEF804, 0xF5FE05FC, 0x0405FD13, 0xFE170DFD);
	r5 = D(r5, s0_2_1, 0x01FB0200, 0x08F9FCF6, 0x120C00FC, 0x0F04EBED);
	r6 = D(r6, s0_2_1, 0xFD03EDFB, 0xF5FDF70D, 0x1B031303, 0x10040409);
	r7 = D(r7, s0_2_1, 0xF7050AF4, 0xF2F0F103, 0x0AFEFFF9, 0x02090605);
	r0 = D(r0, s0_2_2, 0xFF0AFFFE, 0xF501FF0E, 0x040900F6, 0xFDFB06FC);
	r1 = D(r1, s0_2_2, 0x05F914DF, 0xFA0107EB, 0x06FB04FB, 0xF2FDFE1B);
	r2 = D(r2, s0_2_2, 0xF9051608, 0xF602050D, 0x0902F6FC, 0x03F6FFFE);
	r3 = D(r3, s0_2_2, 0x050B0504, 0xEF00010C, 0xF4050510, 0x13F712FF);
	r4 = D(r4, s0_2_2, 0xF0FCFF0F, 0xF3FD0113, 0x03FDFE0E, 0xF9FFFE28);
	r5 = D(r5, s0_2_2, 0x04FE0606, 0xF6FBFC01, 0x1001FFEF, 0xFC01F4F0);
	r6 = D(r6, s0_2_2, 0xF70A08FE, 0x1000F0DE, 0x0DFF0C05, 0x1303FCFE);
	r7 = D(r7, s0_2_2, 0xF8040004, 0xF40001FC, 0x00F80307, 0x0D000C06);
	r0 = D(r0, s1_0_0, 0x000D0CFE, 0x10FB0AFF, 0xF9FDF7FB, 0x04EFFF00);
	r1 = D(r1, s1_0_0, 0xF20103EF, 0xEFFC05FE, 0xFC0A0AFE, 0x020AF804);
	r2 = D(r2, s1_0_0, 0x0700F909, 0x0D0CF805, 0x03070B04, 0x18ECF605);
	r3 = D(r3, s1_0_0, 0xFC061B00, 0xF70504FA, 0xFC03FB06, 0xF8E403FC);
	r4 = D(r4, s1_0_0, 0x05FF0700, 0xF5F1F7FB, 0xF20B06F2, 0x03FEF4FA);
	r5 = D(r5, s1_0_0, 0x00030209, 0xF70D0005, 0x040705FE, 0x04F9DBF9);
	r6 = D(r6, s1_0_0, 0xF3FFF30F, 0x13EF0000, 0x0C050CF8, 0x16F3F203);
	r7 = D(r7, s1_0_0, 0xFCF9FFF6, 0xF7FCFE06, 0xFEFC02F6, 0x010B0506);
	r0 = D(r0, s1_0_1, 0x0FF100EF, 0x16EFFCF3, 0x08F705E0, 0xFFF4F603);
	r1 = D(r1, s1_0_1, 0x07F6F4E3, 0xFC0CF404, 0xFAF9FFFD, 0xFC02F0F9);
	r2 = D(r2, s1_0_1, 0x00F907E6, 0x0BFC010B, 0xFA0B0813, 0x0212DEF9);
	r3 = D(r3, s1_0_1, 0xF5D61EFA, 0x05F1F808, 0xF30C060B, 0xF6070F02);
	r4 = D(r4, s1_0_1, 0x0CF2F9F1, 0xF01F1203, 0x05ED0802, 0xEFE4FE01);
	r5 = D(r5, s1_0_1, 0xFEF803F9, 0x04FDEDF9, 0xFE1119F2, 0xFBFE01F8);
	r6 = D(r6, s1_0_1, 0xE8131B19, 0xEF290F0E, 0xF8CF1FDC, 0xEF1FE811);
	r7 = D(r7, s1_0_1, 0xF21CF3F9, 0xEFFDDFFC, 0x01FC02F1, 0xFAF908E9);
	r0 = D(r0, s1_0_2, 0x0408F502, 0xF905F606, 0xFD0DFC11, 0xFFDBFD03);
	r1 = D(r1, s1_0_2, 0x0DFF0FFD, 0x0D110B09, 0x00FF07FB, 0x08FC0500);
	r2 = D(r2, s1_0_2, 0xF6060CEF, 0xF701F2F7, 0x00FC0402, 0x040216F8);
	r3 = D(r3, s1_0_2, 0xFFE5FCEB, 0x01E7FE04, 0xFDF3FD02, 0x03F60F09);
	r4 = D(r4, s1_0_2, 0x06FE000A, 0xF8F306FD, 0x080604FF, 0x0AFC0500);
	r5 = D(r5, s1_0_2, 0x05F7FBFD, 0x02FC0D01, 0x02F206F4, 0x0B170EFF);
	r6 = D(r6, s1_0_2, 0xF5EFF60A, 0xFCF3F505, 0xFCE3020B, 0xF8F201FE);
	r7 = D(r7, s1_0_2, 0xFD0104E9, 0xFBFFF607, 0x07FE0907, 0x04010EEF);
	r0 = D(r0, s1_1_0, 0x07F3F605, 0xFDF6F9F5, 0xEE08F4FB, 0x08F6FD08);
	r1 = D(r1, s1_1_0, 0x0501F604, 0x0D14000F, 0x03040BF6, 0x0F10060E);
	r2 = D(r2, s1_1_0, 0xFEFEF4FE, 0xFF0AF906, 0x0000F708, 0xFFE0E1F4);
	r3 = D(r3, s1_1_0, 0x0DE41A04, 0xF411F4EF, 0x080701FB, 0xFE07D8EB);
	r4 = D(r4, s1_1_0, 0xFC1BFA00, 0x080CFBF6, 0x09E012EB, 0x07F605FA);
	r5 = D(r5, s1_1_0, 0x0BFB1A02, 0xFE04F317, 0x06FAFA0C, 0x050AC9FA);
	r6 = D(r6, s1_1_0, 0xEF08DDFE, 0xFAE002F5, 0xEAEDFE0E, 0xFFE3180E);
	r7 = D(r7, s1_1_0, 0xFB0401EA, 0xFF03FF04, 0xFF0BF0FD, 0xFC06FCFA);
	r0 = D(r0, s1_1_1, 0xF924DFFA, 0x06FDC91E, 0xE804E128, 0x20F9E739);
	r1 = D(r1, s1_1_1, 0xFBE9C91B, 0xFAE6C024, 0x0BD50205, 0x11BB29BF);
	r2 = D(r2, s1_1_1, 0xFC3A0706, 0x1B17012E, 0x010424ED, 0xEEE6D438);
	r3 = D(r3, s1_1_1, 0xF9E856CD, 0xEA0E0EE5, 0x09E8E905, 0xFED6F117);
	r4 = D(r4, s1_1_1, 0x2BD7F626, 0x1CD40FFB, 0x09D31C9B, 0x03CD1EF4);
	r5 = D(r5, s1_1_1, 0x030CF7E1, 0x04EAF225, 0xFFF2F3FF, 0xF3E9AD22);
	r6 = D(r6, s1_1_1, 0xE7ECF1D6, 0x02E1B2F5, 0xCAF9D00A, 0x04FE120C);
	r7 = D(r7, s1_1_1, 0x0004ECE3, 0xFCE4D90F, 0x04CCCE04, 0xFFFFFDF4);
	r0 = D(r0, s1_1_2, 0xFCFC0719, 0xFAEFFBEA, 0x07EB01EB, 0x02F5F500);
	r1 = D(r1, s1_1_2, 0x080A0904, 0x0B0D1B04, 0x080813F9, 0x05FEFBF9);
	r2 = D(r2, s1_1_2, 0x06D1CFC7, 0xFEEDFCE4, 0x02FD030F, 0x072303EA);
	r3 = D(r3, s1_1_2, 0xFCE2ED13, 0x0BFAED13, 0xF7D4EDFE, 0x0203F001);
	r4 = D(r4, s1_1_2, 0x0AF901EC, 0x00E7F2AE, 0xF7FB0624, 0xFEBDF9D3);
	r5 = D(r5, s1_1_2, 0x02FD0508, 0x0BF21227, 0x0301F7FC, 0x0F1302F4);
	r6 = D(r6, s1_1_2, 0xF7F4E426, 0x00C703E7, 0x01E8FE24, 0x03D7F709);
	r7 = D(r7, s1_1_2, 0xFCF1FACA, 0x04EBE4C3, 0x0503FEFA, 0x141E0FE6);
	r0 = D(r0, s1_2_0, 0xE103FAF6, 0xEF03FCFD, 0x0703F9FB, 0xF2F801FF);
	r1 = D(r1, s1_2_0, 0x16FF06FE, 0x08110100, 0x0FF50801, 0x1D0506FC);
	r2 = D(r2, s1_2_0, 0xF1070001, 0x0E04020A, 0x00F1FCFD, 0xEB050100);
	r3 = D(r3, s1_2_0, 0x05F50904, 0x0301F8F0, 0x04FA0905, 0xF9F0E9FA);
	r4 = D(r4, s1_2_0, 0x0F020709, 0x0A041802, 0x03F7060A, 0x1FE4F504);
	r5 = D(r5, s1_2_0, 0xFDFC0808, 0x04F40508, 0x1303FAFD, 0xF2EDE8FF);
	r6 = D(r6, s1_2_0, 0xFB0A00FE, 0xFCEE0105, 0x17E6E737, 0x0DFCF5FD);
	r7 = D(r7, s1_2_0, 0xF1F50E01, 0xF4E60503, 0x0DFE0EFD, 0x000BFFFA);
	r0 = D(r0, s1_2_1, 0x1C01FAFA, 0x1CFAFC00, 0x06EE01FF, 0x11F50117);
	r1 = D(r1, s1_2_1, 0xF709090A, 0xEF0E1105, 0xF10608E6, 0x0FCFE2EE);
	r2 = D(r2, s1_2_1, 0x1EE5FFED, 0x0DE1EA04, 0xF2FD04F7, 0x14F800F8);
	r3 = D(r3, s1_2_1, 0xF6F9F2EF, 0x06FBE80A, 0x10EE0003, 0xEC08F005);
	r4 = D(r4, s1_2_1, 0x14BBEFFA, 0x0DCEF2F2, 0xF70F03FE, 0x1EACFCFB);
	r5 = D(r5, s1_2_1, 0x050D16FF, 0xF9F6030F, 0x07D3E7FF, 0xF10BF7F7);
	r6 = D(r6, s1_2_1, 0xF9F0FB09, 0xF80703F8, 0x14B7D7F6, 0x00FEF2F3);
	r7 = D(r7, s1_2_1, 0xE70B0EF0, 0x01ECFCFA, 0xFDF6EF01, 0x1DE6F912);
	r0 = D(r0, s1_2_2, 0x000213E6, 0x022804F9, 0xFE05FAFB, 0x00040B11);
	r1 = D(r1, s1_2_2, 0x01F71705, 0x13EB0904, 0x01FC0307, 0x01FD0103);
	r2 = D(r2, s1_2_2, 0x001E03FD, 0xFECAF8D3, 0xFDF9FDF0, 0xF60E13E8);
	r3 = D(r3, s1_2_2, 0x03F7FD05, 0x0603F3F8, 0xFC0A00F9, 0xF604E116);
	r4 = D(r4, s1_2_2, 0x050EF8F4, 0xFB1B0F03, 0x0101FFFB, 0x07F0DCC2);
	r5 = D(r5, s1_2_2, 0x03060201, 0x00F6FF03, 0x020F02DB, 0xFFFD01FA);
	r6 = D(r6, s1_2_2, 0xFBF4F304, 0xF7FB1015, 0x291FE781, 0xF1FFFBF8);
	r7 = D(r7, s1_2_2, 0xF40B0EF4, 0xEEFD000A, 0xFD06FF0C, 0x050B09F6);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(-1.196e-02, -3.708e-02, -7.873e-03, 1.220e-02);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(-8.792e-03, 1.239e-02, 2.601e-02, 2.801e-02);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(6.314e-03, -1.981e-02, -8.884e-04, -1.271e-02);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(2.997e-02, 1.547e-02, 7.691e-03, 2.678e-02);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(1.252e-03, 2.521e-02, 6.973e-03, 1.146e-02);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(1.547e-02, 1.853e-02, -3.587e-03, -5.967e-02);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 0), f5);
	f6 = vec4(r6) * 6.2000124e-05;
	f6 += vec4(-4.035e-03, -2.728e-02, -4.441e-02, -2.851e-02);
	f6 = clamp(f6, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f6);
	f7 = vec4(r7) * 6.2000124e-05;
	f7 += vec4(-4.290e-03, -3.601e-03, -3.235e-02, 2.697e-02);
	f7 = clamp(f7, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 1), f7);
}

//!DESC [CuNNy_4x32_DS_vk] -conv4
//!HOOK LUMA
//!COMPUTE 32 16 8 8
//!BIND conv3
//!BIND LUMA
//!SAVE conv4
//!WIDTH LUMA.w 4 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 4
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_spirv_intrinsics : require
spirv_instruction (extensions = ["SPV_KHR_integer_dot_product"], capabilities = [6019, 6018], id = 4450)
int dp4(int a, int b, spirv_literal int fmt);
#define D(r, s, a, b, c, d) r + ivec4(dp4(s, a, 0), dp4(s, b, 0), dp4(s, c, 0), dp4(s, d, 0))
shared int G[8][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(4, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec2 p;
			vec4 r, g, b, a;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(1, 1)) * conv3_pt;
			r = conv3_gather(p, 0);
			g = conv3_gather(p, 1);
			b = conv3_gather(p, 2);
			a = conv3_gather(p, 3);
			vec4 v0 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v1 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v2 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v3 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(3, 1)) * conv3_pt;
			r = conv3_gather(p, 0);
			g = conv3_gather(p, 1);
			b = conv3_gather(p, 2);
			a = conv3_gather(p, 3);
			vec4 v4 = vec4(r.w, g.w, b.w, a.w) * 1.0000000e+00;
			vec4 v5 = vec4(r.z, g.z, b.z, a.z) * 1.0000000e+00;
			vec4 v6 = vec4(r.x, g.x, b.x, a.x) * 1.0000000e+00;
			vec4 v7 = vec4(r.y, g.y, b.y, a.y) * 1.0000000e+00;
			G[0][ay][ax] = int(packSnorm4x8(v0));
			G[1][ay][ax] = int(packSnorm4x8(v1));
			G[2][ay][ax] = int(packSnorm4x8(v2));
			G[3][ay][ax] = int(packSnorm4x8(v3));
			G[4][ay][ax] = int(packSnorm4x8(v4));
			G[5][ay][ax] = int(packSnorm4x8(v5));
			G[6][ay][ax] = int(packSnorm4x8(v6));
			G[7][ay][ax] = int(packSnorm4x8(v7));
		}
	}
	barrier();
	int s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	ivec4 r0, r1, r2, r3, r4, r5, r6, r7;
	vec4 f0, f1, f2, f3, f4, f5, f6, f7;
	r0 = ivec4(0); r1 = ivec4(0); r2 = ivec4(0); r3 = ivec4(0); r4 = ivec4(0); r5 = ivec4(0); r6 = ivec4(0); r7 = ivec4(0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0x0AF91FFD, 0x0604FE07, 0xFF010801, 0x06010304);
	r1 = D(r1, s0_0_0, 0xFAFE00FF, 0x1200FC0B, 0x01FFFF00, 0x00FE06FE);
	r2 = D(r2, s0_0_0, 0x0404FF03, 0x0200FF04, 0x0804FB06, 0xFF02FEFD);
	r3 = D(r3, s0_0_0, 0xFDFF05F4, 0xFE00FE03, 0xFD06FEFD, 0x0E0307F5);
	r4 = D(r4, s0_0_0, 0x010205FA, 0xFAFC0503, 0xFCFCFDFB, 0xF30102FD);
	r5 = D(r5, s0_0_0, 0x00FFFF03, 0x0301FEFD, 0x01030BFD, 0x02000202);
	r6 = D(r6, s0_0_0, 0x0502FE05, 0xFF0006FD, 0xFCFB000C, 0x0702FF02);
	r7 = D(r7, s0_0_0, 0xFD00FF07, 0xFC02F4FA, 0x0603F7FF, 0xFCFD04FE);
	r0 = D(r0, s0_0_1, 0x000AE5CC, 0x0D05FB07, 0x0B03FD07, 0x06010202);
	r1 = D(r1, s0_0_1, 0x0B00F401, 0x0FFAFC2F, 0xFFFF02FF, 0x00FD0603);
	r2 = D(r2, s0_0_1, 0xF5FF0B04, 0xE7060EE9, 0xFD0108ED, 0x140AF90E);
	r3 = D(r3, s0_0_1, 0x05021108, 0x0BFAF508, 0x0405000B, 0xF202FCEA);
	r4 = D(r4, s0_0_1, 0xFA0204F3, 0x03FD02EB, 0x07FBFB0E, 0xF00501F7);
	r5 = D(r5, s0_0_1, 0x0001FF00, 0xF70A05F4, 0xE5F70100, 0x02FEF903);
	r6 = D(r6, s0_0_1, 0xF804FC03, 0x0AFEF810, 0xECFEFD06, 0x14FB0019);
	r7 = D(r7, s0_0_1, 0x01FFF8FC, 0x05040702, 0x0602F707, 0xFA000406);
	r0 = D(r0, s0_0_2, 0x00F50D0D, 0xFBFF0807, 0x03020405, 0xF8020206);
	r1 = D(r1, s0_0_2, 0x03FDFCFE, 0xFAE30AEF, 0x01FD0004, 0x040202FF);
	r2 = D(r2, s0_0_2, 0x03FF0705, 0xF90005EE, 0xFFFE08FF, 0xF8FBF316);
	r3 = D(r3, s0_0_2, 0xFCFEEFE3, 0x02F6FCF6, 0x0301FEF2, 0x050300FE);
	r4 = D(r4, s0_0_2, 0x02FC00FA, 0x01FAFD02, 0x00F80309, 0xFE0403FE);
	r5 = D(r5, s0_0_2, 0x000000FB, 0x03070207, 0xFF05F60F, 0xFEFF0201);
	r6 = D(r6, s0_0_2, 0xF900000B, 0xF601FC05, 0x0300060A, 0xF8EF0813);
	r7 = D(r7, s0_0_2, 0x00000501, 0x01FEF702, 0xFEFB04FD, 0xFFFF0500);
	r0 = D(r0, s0_1_0, 0x09FAFC08, 0xFD00050E, 0xFBF20304, 0x1206020C);
	r1 = D(r1, s0_1_0, 0xEC05FCE6, 0x96011E04, 0xFF04FB06, 0xEC0102FD);
	r2 = D(r2, s0_1_0, 0x0D06FD15, 0xFD03F007, 0x0B00070C, 0x01020402);
	r3 = D(r3, s0_1_0, 0x09040ADB, 0x16FFFF02, 0xF300FEEF, 0x120508FE);
	r4 = D(r4, s0_1_0, 0x0618E815, 0xFBFB0806, 0xF6FBFEF6, 0x010FE8F9);
	r5 = D(r5, s0_1_0, 0x0001F7FC, 0xED030201, 0xF800F20B, 0xF904FB09);
	r6 = D(r6, s0_1_0, 0xF90C0E07, 0x0901F917, 0xF2FFF30A, 0xF507FDF3);
	r7 = D(r7, s0_1_0, 0xEA0BA9F6, 0xFEFBF503, 0xF90E08F3, 0xEDFFF4EC);
	r0 = D(r0, s0_1_1, 0x270CE7D7, 0xEE08C4F5, 0xFB20FD12, 0xF70CF403);
	r1 = D(r1, s0_1_1, 0xFE12F10A, 0xA634040A, 0x0207FC0F, 0x1D07F725);
	r2 = D(r2, s0_1_1, 0xF908E4EB, 0xE31AE014, 0xE01CD31F, 0x0E0F18F9);
	r3 = D(r3, s0_1_1, 0x002DE716, 0x11340CD3, 0x091CF223, 0xF71FFDF6);
	r4 = D(r4, s0_1_1, 0x00F41B07, 0x0B04FCEE, 0xF92D030C, 0xF80DF90F);
	r5 = D(r5, s0_1_1, 0xF5EFEDF4, 0xE9C6EC28, 0xFC16D826, 0x00F8F20F);
	r6 = D(r6, s0_1_1, 0xE8F6DE29, 0xDD1A04F8, 0x00154008, 0xD63AEAE2);
	r7 = D(r7, s0_1_1, 0xF6FBFE10, 0x08131DE7, 0xEE12F304, 0xFD001126);
	r0 = D(r0, s0_1_2, 0x0E10D205, 0x03090301, 0x01F90E08, 0x09010106);
	r1 = D(r1, s0_1_2, 0x00FE08FC, 0xF7F2F20B, 0xFCFEFCF8, 0xFFF00506);
	r2 = D(r2, s0_1_2, 0xFEFA11FD, 0x04FC1A03, 0xFEFD0DF9, 0xFD0515F7);
	r3 = D(r3, s0_1_2, 0x14F3FAFA, 0xF9FAFFFC, 0x01FDE8F5, 0xFDFE0B01);
	r4 = D(r4, s0_1_2, 0x0103F7FE, 0x01FA0CFF, 0xF7F8E20F, 0xFFFB040A);
	r5 = D(r5, s0_1_2, 0x02FEFC11, 0x060DF50D, 0xFF0D06F1, 0x00FF0604);
	r6 = D(r6, s0_1_2, 0x040B0AF4, 0x09EF2111, 0xFAFFF5FF, 0x0A040100);
	r7 = D(r7, s0_1_2, 0xFCFDFC01, 0xFFFCFE03, 0xFEFCF908, 0xF7FCFEFA);
	r0 = D(r0, s0_2_0, 0xF7F5F522, 0x0A02FCFE, 0x0901FD14, 0x0300FDFB);
	r1 = D(r1, s0_2_0, 0xF704FD05, 0xE4F2F8BE, 0x00FBF202, 0x0305DDFF);
	r2 = D(r2, s0_2_0, 0x09FF0B07, 0x00070DF0, 0x05FD09FF, 0x0300FB05);
	r3 = D(r3, s0_2_0, 0x01FBF5F0, 0xFF03FB03, 0xFCFBF7F8, 0x0BFFF602);
	r4 = D(r4, s0_2_0, 0x0CFA0001, 0xE8F8010A, 0xFB0605FF, 0x060804F9);
	r5 = D(r5, s0_2_0, 0xFF090500, 0x000402FD, 0xFA06F806, 0xD1FE0217);
	r6 = D(r6, s0_2_0, 0xF0FB0112, 0xF204F708, 0x03010409, 0xF8F20903);
	r7 = D(r7, s0_2_0, 0xF3FA0408, 0x01FFF809, 0xF3020305, 0x05FBF909);
	r0 = D(r0, s0_2_1, 0xFC0CA6E7, 0xF70D0812, 0xEEFE0F01, 0xF2030FFF);
	r1 = D(r1, s0_2_1, 0xDA0D0BFB, 0xF7049BFE, 0xF704F306, 0xDA02F1F6);
	r2 = D(r2, s0_2_1, 0xF91704FD, 0x030AF6F0, 0x05FE11FF, 0x0404EF08);
	r3 = D(r3, s0_2_1, 0x12EA2310, 0x09F7F2FC, 0x050813FA, 0xFD030604);
	r4 = D(r4, s0_2_1, 0xF50C0CF4, 0xFA00E811, 0xF707090F, 0x0407E1EE);
	r5 = D(r5, s0_2_1, 0x021D1FEA, 0xF70EFD05, 0xFE0CE8F9, 0xF40406F5);
	r6 = D(r6, s0_2_1, 0x081303ED, 0xEC092107, 0xF603F8FF, 0xE00A04F7);
	r7 = D(r7, s0_2_1, 0xFBFD0CF7, 0x000603FB, 0xF30700FB, 0xED0117FA);
	r0 = D(r0, s0_2_2, 0x10C51400, 0xFFF7EB03, 0x07FD0DFA, 0x0703F9FB);
	r1 = D(r1, s0_2_2, 0x00F9FC02, 0x03D7F1D1, 0x04FC09F9, 0x03FFF300);
	r2 = D(r2, s0_2_2, 0xFC030CF4, 0xFC08F502, 0xFC0304FA, 0xFEFE05FA);
	r3 = D(r3, s0_2_2, 0xEA02F80C, 0xFE060003, 0xFF05E404, 0xFC05FBFD);
	r4 = D(r4, s0_2_2, 0x01FFFC01, 0x04E62DF3, 0xFCFF05FB, 0xFE0DF2F5);
	r5 = D(r5, s0_2_2, 0xFF05FFF8, 0x0502FCF9, 0xF8000007, 0xFF03FBFE);
	r6 = D(r6, s0_2_2, 0xFCFDF80A, 0xF307E1F9, 0xFE0108FE, 0xF7F70F04);
	r7 = D(r7, s0_2_2, 0x0100F9FE, 0xFFFE0400, 0xFF05FCFB, 0x0002FCFC);
	r0 = D(r0, s1_0_0, 0xF932B7F8, 0x0407FCFD, 0xFAF1050A, 0xFEF10805);
	r1 = D(r1, s1_0_0, 0x0300F803, 0x131FCD06, 0x01FFFF03, 0x0101F80D);
	r2 = D(r2, s1_0_0, 0x070200FA, 0x06F8FE03, 0x0204FFF1, 0x0008FE04);
	r3 = D(r3, s1_0_0, 0x09F90127, 0x010705F9, 0x01FAFD00, 0x0811F5ED);
	r4 = D(r4, s1_0_0, 0x0805F600, 0x0013FEF6, 0xFEFCFFFF, 0xF9F00208);
	r5 = D(r5, s1_0_0, 0xFF0101FD, 0xFC01F008, 0x0205F9FF, 0x010AF800);
	r6 = D(r6, s1_0_0, 0x020101FC, 0x02FD050F, 0xFFFEF7F2, 0x070CFCF6);
	r7 = D(r7, s1_0_0, 0x0405F3ED, 0x02FA0000, 0x030EFFEC, 0xFFFC01F5);
	r0 = D(r0, s1_0_1, 0x4FAA3D4C, 0x01010306, 0xFF080AFE, 0x0D06FE0A);
	r1 = D(r1, s1_0_1, 0x0B07F0FF, 0x020BB6E4, 0xFD0008F7, 0x08FA090C);
	r2 = D(r2, s1_0_1, 0x02010506, 0x08F70406, 0x0DFC0613, 0x0606EC0C);
	r3 = D(r3, s1_0_1, 0xF9F4F6F3, 0x110DEAF8, 0xFAF11403, 0x00FFFC15);
	r4 = D(r4, s1_0_1, 0x09FF0004, 0xF5FD050B, 0x070106E6, 0xF7FA0BFE);
	r5 = D(r5, s1_0_1, 0x0000FC00, 0xF2F4140E, 0xFCFC0806, 0x0804FA05);
	r6 = D(r6, s1_0_1, 0x0802FB07, 0x040CF0F4, 0xF9FD0A10, 0xFA10DDF2);
	r7 = D(r7, s1_0_1, 0x11F80207, 0xFA03FDF9, 0x0710EE06, 0x0900F6FF);
	r0 = D(r0, s1_0_2, 0xA60DD20A, 0xFCF207EB, 0xFD0304F4, 0x01010200);
	r1 = D(r1, s1_0_2, 0x08F80001, 0xFCE4C711, 0xFF02FBF4, 0xFEFE0101);
	r2 = D(r2, s1_0_2, 0x0403F7FB, 0x03040D0C, 0x04F5FB06, 0xF9FB11CF);
	r3 = D(r3, s1_0_2, 0x01E119F9, 0x02000005, 0x000405F7, 0xF901F6FC);
	r4 = D(r4, s1_0_2, 0xFEFFFBFF, 0xFEFD0002, 0x06FDFC07, 0x010702FC);
	r5 = D(r5, s1_0_2, 0xFF00FD01, 0xFF04F8FF, 0xF7020907, 0xFDFE0101);
	r6 = D(r6, s1_0_2, 0x04FE0A02, 0xFEFF0A08, 0x0BFC02FB, 0xFAFCE907);
	r7 = D(r7, s1_0_2, 0x02FD0107, 0x00FD00FB, 0x0700FF05, 0x09FD0107);
	r0 = D(r0, s1_1_0, 0x020CB202, 0x0207FAEB, 0x00EB18F5, 0x0307F5F2);
	r1 = D(r1, s1_1_0, 0xFEED0A08, 0xFA9D072D, 0x0002F111, 0xFDEFF9FA);
	r2 = D(r2, s1_1_0, 0x010BE4ED, 0x02F8080B, 0x0502F7FE, 0x0201F7FB);
	r3 = D(r3, s1_1_0, 0x01F707F5, 0x0016F7E9, 0x0403FA02, 0xFF0BEEEE);
	r4 = D(r4, s1_1_0, 0x050FDE0D, 0xFC06F9E9, 0xFE070601, 0x0305FC07);
	r5 = D(r5, s1_1_0, 0x01F6030B, 0xFEE90B18, 0xF7ED0A04, 0xF806DA13);
	r6 = D(r6, s1_1_0, 0xFE05F408, 0x0612E9FB, 0xFE04070D, 0xFDEA0D22);
	r7 = D(r7, s1_1_0, 0xF3E51030, 0xFFFD08FF, 0x00FAF823, 0x02F7FA1A);
	r0 = D(r0, s1_1_1, 0x0E0522D0, 0xFF021BFF, 0xFE0C0E0E, 0x0D1323D3);
	r1 = D(r1, s1_1_1, 0x0F0AFFF5, 0x1CDD1919, 0xFF07E212, 0xFC24BFE5);
	r2 = D(r2, s1_1_1, 0x06070615, 0xEF0BF0E1, 0xFA041603, 0x03081C13);
	r3 = D(r3, s1_1_1, 0x0313CDFA, 0xF13EE02F, 0xFFF503DB, 0xFD130EF3);
	r4 = D(r4, s1_1_1, 0x0D0DF7F2, 0xF1D90E39, 0x07F930DD, 0xF6FFFAEE);
	r5 = D(r5, s1_1_1, 0xFE0214FC, 0x0ABF0AD4, 0x020701F1, 0xFA041BE7);
	r6 = D(r6, s1_1_1, 0x020320D6, 0x0401170D, 0x0207ECBA, 0x031619C3);
	r7 = D(r7, s1_1_1, 0xDF050DEF, 0xF8FB15E9, 0x02121EC7, 0xF90320EF);
	r0 = D(r0, s1_1_2, 0xDC0DD60C, 0x020DEF0B, 0x070606EC, 0x0615F503);
	r1 = D(r1, s1_1_2, 0xFEEF0903, 0xE414F5E0, 0xFCFF0606, 0x09F308FE);
	r2 = D(r2, s1_1_2, 0x0104F8FB, 0xC600F9F0, 0xFD14E1FD, 0xF80AEADE);
	r3 = D(r3, s1_1_2, 0xE6F126EA, 0xE0D20FFF, 0xE7F811F3, 0x0215E500);
	r4 = D(r4, s1_1_2, 0xFC0301FD, 0x11F1FB04, 0xEE0606F1, 0xEB15F6EF);
	r5 = D(r5, s1_1_2, 0x020307F3, 0x3127F402, 0xE6F309F7, 0x02FC05FE);
	r6 = D(r6, s1_1_2, 0x02FA0500, 0xFD0501EE, 0xFAFE06FF, 0xF50A10EF);
	r7 = D(r7, s1_1_2, 0x00F70505, 0xFF01FFFF, 0xF80502FB, 0xF8FA0302);
	r0 = D(r0, s1_2_0, 0x1402C0FA, 0x01060608, 0x0201F000, 0x03000707);
	r1 = D(r1, s1_2_0, 0x00FEF8FF, 0xF03BB4DC, 0x00FF0FF5, 0xFBFB04FC);
	r2 = D(r2, s1_2_0, 0x03FCEEFE, 0x00000901, 0x02FFFF03, 0x0304FCF9);
	r3 = D(r3, s1_2_0, 0xFC091313, 0x03FEFDFB, 0x00FC0D01, 0x010001F9);
	r4 = D(r4, s1_2_0, 0x0301FE00, 0xFF0DF6C7, 0xF804FFFF, 0x0006FFFA);
	r5 = D(r5, s1_2_0, 0x0402FD01, 0xFF07FCF8, 0x01FC02FD, 0xFBF71FE6);
	r6 = D(r6, s1_2_0, 0xFEF807FD, 0xFA0012F9, 0xFFFDFBFD, 0x08FBF905);
	r7 = D(r7, s1_2_0, 0xFB05F2FF, 0x0000FE02, 0x01FC03F7, 0xFE00FAFC);
	r0 = D(r0, s1_2_1, 0xD0D0224E, 0x040110FF, 0xF40709E9, 0xFA05FF07);
	r1 = D(r1, s1_2_1, 0x0706F4FD, 0xF925BEC3, 0xFD09EB02, 0xF806EFF1);
	r2 = D(r2, s1_2_1, 0xF9FD0B04, 0xF80408F8, 0xFA04FB04, 0xFDFD0A00);
	r3 = D(r3, s1_2_1, 0xF024FBD4, 0x02EDFDF8, 0xFF00FAFD, 0xFAFC0510);
	r4 = D(r4, s1_2_1, 0xF5FDF908, 0xEDE4241F, 0xFCF6FE01, 0x04F50FFB);
	r5 = D(r5, s1_2_1, 0xF7FD0DF6, 0x020E0002, 0xFAFC06F9, 0xE80900F1);
	r6 = D(r6, s1_2_1, 0xFCFF0BF4, 0xF906F4EE, 0xF9FA0902, 0xF305E4EB);
	r7 = D(r7, s1_2_1, 0xF808EAFB, 0xFC02FDF9, 0xFFFFF70F, 0xEF00D8F3);
	r0 = D(r0, s1_2_2, 0xEE5AECD3, 0xFBF117FF, 0x0C0B01FF, 0x0B06F807);
	r1 = D(r1, s1_2_2, 0x020C0105, 0xF243C0F9, 0xFE02EF02, 0xFC090DFB);
	r2 = D(r2, s1_2_2, 0xFF11E2FF, 0xF9F80704, 0x0001FEFB, 0xFD02FAF4);
	r3 = D(r3, s1_2_2, 0xDBEA0206, 0xF8F600FD, 0xF3FBFF00, 0xFC09F9F9);
	r4 = D(r4, s1_2_2, 0xFE0AFDFC, 0xFF20F3F5, 0x000FE9F8, 0xF9FCFC03);
	r5 = D(r5, s1_2_2, 0xF50000FD, 0x130506FC, 0xF7FBFF06, 0x05FA0402);
	r6 = D(r6, s1_2_2, 0xFDF50406, 0xF9F51AFC, 0x0102FB03, 0xFE0508FB);
	r7 = D(r7, s1_2_2, 0x0301FE01, 0xFCFF00FE, 0x00FF05FC, 0x0608FC03);
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xCE21B7ED, 0xFF09FF03, 0x0309FDF9, 0xFA0BF206);
	r1 = D(r1, s0_0_0, 0xFE00FEF9, 0x0CDF0A06, 0x0301FE00, 0xFE01FE04);
	r2 = D(r2, s0_0_0, 0xFE00FD04, 0x0308FB01, 0xFBFEFFFE, 0xF9020300);
	r3 = D(r3, s0_0_0, 0x0EF6E507, 0xFDFF0003, 0x02F903FA, 0xF6FF03F9);
	r4 = D(r4, s0_0_0, 0x010003F0, 0x07FF0302, 0xFF05F604, 0x040304FD);
	r5 = D(r5, s0_0_0, 0xFD040000, 0x04FDFB04, 0x0308F6FD, 0xFF050403);
	r6 = D(r6, s0_0_0, 0xFF040005, 0xFC050306, 0xFEFDFE02, 0x1302FDFA);
	r7 = D(r7, s0_0_0, 0xF205FCE7, 0xFAFCFCF0, 0xFDFFF8FD, 0xF502FFFB);
	r0 = D(r0, s0_0_1, 0x62FB0781, 0x13FFFCF5, 0xF7140009, 0x0808F7FA);
	r1 = D(r1, s0_0_1, 0x04F8FD10, 0x25E3FB1C, 0xFE000100, 0x090F000F);
	r2 = D(r2, s0_0_1, 0x001505E6, 0x0014F001, 0x17FE02F5, 0x06DD09F2);
	r3 = D(r3, s0_0_1, 0xFDEDFEE9, 0x02F2040D, 0xF70002F3, 0x0B0304E9);
	r4 = D(r4, s0_0_1, 0x011004E4, 0x02F40109, 0x04FDFE03, 0xFF13FEF4);
	r5 = D(r5, s0_0_1, 0xFD00FDFD, 0xF410F9F9, 0xFF0AF7F4, 0xFE07FE00);
	r6 = D(r6, s0_0_1, 0x0B0103F4, 0x06FA000D, 0x0E0501EB, 0x2ACD0407);
	r7 = D(r7, s0_0_1, 0xFF05F806, 0x0DFC06FE, 0x11F307F9, 0x12FFFF00);
	r0 = D(r0, s0_0_2, 0x371D0F2D, 0xF60101F9, 0xF202FFF9, 0x0001FFEA);
	r1 = D(r1, s0_0_2, 0x0102FE02, 0xC00AF721, 0x0302FF03, 0xFDFE00FB);
	r2 = D(r2, s0_0_2, 0x0603FE0B, 0x090DFAEC, 0xFE03FE02, 0xF8110603);
	r3 = D(r3, s0_0_2, 0x3C13000A, 0xF4F90109, 0xFD0AFE08, 0x071307FF);
	r4 = D(r4, s0_0_2, 0xFFFFFB0C, 0x09F1FE11, 0x0302FD09, 0x0408FEF5);
	r5 = D(r5, s0_0_2, 0x01FC01FF, 0x04020004, 0xFE0206F8, 0x02FD02FF);
	r6 = D(r6, s0_0_2, 0xFB0A02FA, 0xFB02FFF3, 0xFC04FF07, 0x0B02F30C);
	r7 = D(r7, s0_0_2, 0xFEFE0100, 0xFC03FE01, 0xF3FF00FA, 0xFF06FE05);
	r0 = D(r0, s0_1_0, 0x06F4F404, 0xFB0B05FF, 0xFBFD0006, 0xFB04F6F7);
	r1 = D(r1, s0_1_0, 0x010007FE, 0x0DF318D3, 0x0400FAFC, 0xFBFF03F9);
	r2 = D(r2, s0_1_0, 0xF803F8F8, 0x08FC05EF, 0xFC0507E8, 0x02FF02FF);
	r3 = D(r3, s0_1_0, 0x1001EBE6, 0xFE0600FD, 0x0200F6FD, 0xFA12FC01);
	r4 = D(r4, s0_1_0, 0x0CF0FAF6, 0x08FCF6FE, 0x00F6FEFD, 0x030803F8);
	r5 = D(r5, s0_1_0, 0x03FA05FB, 0xFFF0000B, 0x0EF405F9, 0xEAFCF900);
	r6 = D(r6, s0_1_0, 0xFB05F5FB, 0xFFF7F5FB, 0x0D09FCF9, 0xF50EF000);
	r7 = D(r7, s0_1_0, 0x04E8FC81, 0x02FFFAFD, 0x02F9FFF5, 0x12FEFDF7);
	r0 = D(r0, s0_1_1, 0x5DAFE6F4, 0x34D6F3F6, 0x1ADCFEEF, 0x07B2D3F8);
	r1 = D(r1, s0_1_1, 0xF40E05F5, 0xE4F4E2B3, 0x23CEF7F7, 0x02E9FBEF);
	r2 = D(r2, s0_1_1, 0x24BAF7E5, 0xF2C415FD, 0x1FCFDCE0, 0xF404F7F4);
	r3 = D(r3, s0_1_1, 0xFBC5E0E5, 0x0C0F1401, 0xEFE909EC, 0x0CE0F0F6);
	r4 = D(r4, s0_1_1, 0x2C21EEFA, 0x04FCF809, 0xF409FDF9, 0xF6D314FA);
	r5 = D(r5, s0_1_1, 0xDD13FCF7, 0xF2FEE603, 0xFEDD0AF8, 0x12F703FB);
	r6 = D(r6, s0_1_1, 0xF4EFF3F2, 0x13F3DFF5, 0xD7E6ED00, 0xEEDB98CD);
	r7 = D(r7, s0_1_1, 0x171007FC, 0x1AF00EF6, 0x00E9F1F9, 0xD9FAFCDD);
	r0 = D(r0, s0_1_2, 0xDAFFF0E9, 0x04100315, 0xCB13F2FE, 0x080E06FC);
	r1 = D(r1, s0_1_2, 0xF3090005, 0xE2B2F1AD, 0xF00101F6, 0xF00EF60D);
	r2 = D(r2, s0_1_2, 0xF111FFFE, 0xEEEF0A08, 0xFE160205, 0x040CF7FF);
	r3 = D(r3, s0_1_2, 0x1FF7ED05, 0xF3F4F905, 0x02F304FC, 0x060CFBFA);
	r4 = D(r4, s0_1_2, 0x0BFB0500, 0xF30C020A, 0x1C15F704, 0xF810FF02);
	r5 = D(r5, s0_1_2, 0x0609FDF7, 0x0D0F0905, 0xF9FF000E, 0x0103FD04);
	r6 = D(r6, s0_1_2, 0x03FAFE0F, 0xFC04F8FC, 0xFB030600, 0xECF5F8F8);
	r7 = D(r7, s0_1_2, 0xF7070202, 0xF703FDFF, 0xFA07F6F8, 0xF5030BFF);
	r0 = D(r0, s0_2_0, 0x0104F9B7, 0xFE09FEEF, 0xF901EFF9, 0xFD0AF9F4);
	r1 = D(r1, s0_2_0, 0x04000AE8, 0x37290ED7, 0x0300FFFC, 0x0B0209D7);
	r2 = D(r2, s0_2_0, 0xF60204F2, 0x0005FBFE, 0xF80900FD, 0xFF040000);
	r3 = D(r3, s0_2_0, 0xFE07FBEC, 0xFB04FF04, 0x09FB00F3, 0xFA08FDF9);
	r4 = D(r4, s0_2_0, 0x000802F5, 0x07D5130C, 0x06F40306, 0xFB00FCFE);
	r5 = D(r5, s0_2_0, 0x02FE0000, 0xFEFCFF01, 0x0407FA05, 0x14FDF208);
	r6 = D(r6, s0_2_0, 0x0BFDFDFA, 0x0508FCF9, 0xFA000000, 0x0CFE0AF2);
	r7 = D(r7, s0_2_0, 0x0C05000B, 0xFFFDFBFA, 0xFFFFFFFD, 0xFC0305FD);
	r0 = D(r0, s0_2_1, 0x32F8E0D3, 0xF1FEE8FA, 0xED00DEF9, 0xFDFDF4FE);
	r1 = D(r1, s0_2_1, 0xF3F5EFF5, 0x22F417CA, 0xEB0BFAFA, 0xE1F3EAF9);
	r2 = D(r2, s0_2_1, 0x0C05F6E3, 0x1807F6F7, 0xFE0903FC, 0x05FAFDF9);
	r3 = D(r3, s0_2_1, 0xFBFFF2F4, 0x0308FD02, 0xF501F701, 0x070701FF);
	r4 = D(r4, s0_2_1, 0x030AF3FA, 0x0B81DF23, 0x07FBF7F9, 0x0E0304FF);
	r5 = D(r5, s0_2_1, 0x0CF203F9, 0xFDF10403, 0x090AF308, 0x0509FEFC);
	r6 = D(r6, s0_2_1, 0xF7FAF907, 0xE4FBED03, 0x12030505, 0x120906F5);
	r7 = D(r7, s0_2_1, 0xF304F2FD, 0x040002FD, 0xF6030706, 0x11FCF204);
	r0 = D(r0, s0_2_2, 0x170B15F9, 0x18FC09FF, 0x09F30DFE, 0xFF0606FF);
	r1 = D(r1, s0_2_2, 0xEDFB0AF9, 0x2FDEDD81, 0xFEF9FDFE, 0xFCFB02FD);
	r2 = D(r2, s0_2_2, 0x060CF805, 0x060DF2FD, 0x0900FA04, 0x0E06FDFF);
	r3 = D(r3, s0_2_2, 0x2007F50A, 0xFE04FB03, 0x05FD04FD, 0x0208FDFF);
	r4 = D(r4, s0_2_2, 0x04FFFF02, 0xE000100C, 0x02FFF5FD, 0xF0FBFAFA);
	r5 = D(r5, s0_2_2, 0xF8FAFCFF, 0xFCFF0405, 0xF402F300, 0xFC02FF01);
	r6 = D(r6, s0_2_2, 0xF009F9FF, 0x06030204, 0xFB06FDFE, 0x05080102);
	r7 = D(r7, s0_2_2, 0xFC00FE01, 0x00010000, 0x0E04FE00, 0xFB03FCFF);
	r0 = D(r0, s1_0_0, 0xFDE006F3, 0xFAFC07FB, 0xFF100501, 0xFAFE05FE);
	r1 = D(r1, s1_0_0, 0x0000FEF9, 0xFAF408DE, 0x0000FFFF, 0xFDFFFAFF);
	r2 = D(r2, s1_0_0, 0xF8F708FE, 0xFD0802FE, 0xFCF206FC, 0xF5FB03FC);
	r3 = D(r3, s1_0_0, 0xF3FC0AFE, 0x01FB02FC, 0xFD0304FE, 0x02F304F6);
	r4 = D(r4, s1_0_0, 0x01F40BFE, 0xFF01FAF9, 0x03FD0308, 0xFE0EFE03);
	r5 = D(r5, s1_0_0, 0x000201FF, 0xFD09FD03, 0x04090104, 0xFEF5FEFF);
	r6 = D(r6, s1_0_0, 0x00FC02FA, 0xFE01FE00, 0xFEFE0400, 0xEBF50704);
	r7 = D(r7, s1_0_0, 0x03F5FDF5, 0xFE04FEFF, 0xFCF403FA, 0xFE02FFFE);
	r0 = D(r0, s1_0_1, 0xD9220DF4, 0xFE0C02FE, 0xF906FFF8, 0xFCFC07F9);
	r1 = D(r1, s1_0_1, 0x02F600FE, 0x05EA06EE, 0x00FFFF01, 0xF90303FD);
	r2 = D(r2, s1_0_1, 0x010204FD, 0xFF140604, 0xF9060304, 0xFE000AFE);
	r3 = D(r3, s1_0_1, 0xD6FD17FF, 0x00E501F8, 0xF90102FA, 0x000C09FD);
	r4 = D(r4, s1_0_1, 0xFE050201, 0xF9FAF608, 0xF5F6F9F8, 0xFF1102FF);
	r5 = D(r5, s1_0_1, 0x000401FF, 0xFE1D0206, 0x0211FF06, 0xFEFEFDFC);
	r6 = D(r6, s1_0_1, 0xFD060401, 0xF9FB00FE, 0x010304FD, 0xF4F50500);
	r7 = D(r7, s1_0_1, 0xFBFF01FF, 0xFFFE01FF, 0xF9FBFEFF, 0x00FD00F7);
	r0 = D(r0, s1_0_2, 0xDDEC1DFE, 0xF70007FB, 0xFEFD04FE, 0x08FE07FE);
	r1 = D(r1, s1_0_2, 0xFBFE0002, 0xF0FBF810, 0xFFFFFD00, 0xFE01FFFF);
	r2 = D(r2, s1_0_2, 0xFD02FEFE, 0xFF000CFA, 0xF4030201, 0xEE0205F8);
	r3 = D(r3, s1_0_2, 0xE50AFF03, 0xF9FBFFFD, 0xFD00FCFC, 0xFA0A06FC);
	r4 = D(r4, s1_0_2, 0xFE01FFFB, 0xFCFF0300, 0xF3FD0203, 0x020403FF);
	r5 = D(r5, s1_0_2, 0x020003FF, 0xFE0602FE, 0x030200FF, 0xFF0002FD);
	r6 = D(r6, s1_0_2, 0x000106FB, 0x04FB06F4, 0xF8FF0800, 0xEFFEF904);
	r7 = D(r7, s1_0_2, 0x0001FF01, 0xFE02FEFF, 0x06FD07F6, 0xFDFD0101);
	r0 = D(r0, s1_1_0, 0x23D9E9F6, 0xFFFB03FD, 0xF70B00FE, 0x00F7FEF7);
	r1 = D(r1, s1_1_0, 0xF916FCF8, 0x033EE0FA, 0xFB02F801, 0xF40803F6);
	r2 = D(r2, s1_1_0, 0xF8F50BF8, 0xE805FEFD, 0xF4F407FC, 0xFDF7FE01);
	r3 = D(r3, s1_1_0, 0x0D0B040B, 0xF9E9FFF0, 0xFB14010A, 0x01F2F2EE);
	r4 = D(r4, s1_1_0, 0xFCF5FEF1, 0xFFFFFCF8, 0xEEF6FA03, 0xFC030602);
	r5 = D(r5, s1_1_0, 0xF900FF01, 0x0417090A, 0xF30E0205, 0x02FC00F5);
	r6 = D(r6, s1_1_0, 0x0405FD06, 0xF7ED0EFF, 0xF60200F9, 0xFD12D801);
	r7 = D(r7, s1_1_0, 0xFB1AEEF1, 0xF50FFFFE, 0x0B08EEFB, 0xFA0208F9);
	r0 = D(r0, s1_1_1, 0x0116FBDD, 0xF11E0304, 0x09FE05DF, 0x09F40AF1);
	r1 = D(r1, s1_1_1, 0x0512F0F9, 0x191EFFE5, 0xF5F3FC05, 0x00FC01EF);
	r2 = D(r2, s1_1_1, 0xFBFC05FD, 0xF30CFAF1, 0xEE110DEB, 0xFC0703F0);
	r3 = D(r3, s1_1_1, 0xFA12E7E7, 0x094D06F1, 0xFC17EAFA, 0x03FA0DEC);
	r4 = D(r4, s1_1_1, 0xFC0309F6, 0xFF0D1108, 0x0522E4CF, 0xFE05FF06);
	r5 = D(r5, s1_1_1, 0xF80AFD02, 0xFBCCFFF1, 0x0508FDF4, 0x02FB0100);
	r6 = D(r6, s1_1_1, 0x0713FCF2, 0x0B0BF7F9, 0xFF0802EE, 0xFB0DC9E3);
	r7 = D(r7, s1_1_1, 0x01FA09F2, 0xFEFAFD03, 0x0111FAF3, 0xFA0707FD);
	r0 = D(r0, s1_1_2, 0xEF092DE6, 0xFB08FDF7, 0xFC0508FA, 0xFE0E02FD);
	r1 = D(r1, s1_1_2, 0x06FA01EC, 0x10D905BB, 0xF801FE00, 0xFFFEFCFE);
	r2 = D(r2, s1_1_2, 0xE90602FF, 0xFA0803FD, 0xF305FEF8, 0xE304FEFD);
	r3 = D(r3, s1_1_2, 0xFFF917F0, 0xFFF4FDF9, 0x00F703F9, 0xFB0A09F8);
	r4 = D(r4, s1_1_2, 0xFFFF0002, 0xFFFD0BF5, 0xFFF908F2, 0xFC060105);
	r5 = D(r5, s1_1_2, 0xFFFD05FF, 0x010D0500, 0xF703FFFF, 0xFC000501);
	r6 = D(r6, s1_1_2, 0xFE03FBF9, 0x06050AF6, 0xF60000FD, 0xF4F214F4);
	r7 = D(r7, s1_1_2, 0xFBFF0100, 0xFE01FEFF, 0xFE040700, 0xF80103FC);
	r0 = D(r0, s1_2_0, 0xF6EBF5F6, 0x06FF05F9, 0xF8FF00EA, 0x0905FEF5);
	r1 = D(r1, s1_2_0, 0xFE081304, 0xD70002F5, 0xFD04FDFD, 0xF6080E06);
	r2 = D(r2, s1_2_0, 0xF9F604FB, 0x00F9F800, 0x01000500, 0xFDFB0601);
	r3 = D(r3, s1_2_0, 0xE5FA0E02, 0xFFFF01FF, 0xFB050501, 0xFCFA03FE);
	r4 = D(r4, s1_2_0, 0x02F103F1, 0xEAFEDFF3, 0xFDF70407, 0x07F7F3FC);
	r5 = D(r5, s1_2_0, 0xF9FEF9FC, 0xFB03FB00, 0x06FDFAFA, 0x020600EA);
	r6 = D(r6, s1_2_0, 0xFB08FEF6, 0x010EEEF1, 0xFF0300FC, 0xF40C06FB);
	r7 = D(r7, s1_2_0, 0xFB010BF8, 0xFD0202FE, 0xF9060BF9, 0xFC00FEFC);
	r0 = D(r0, s1_2_1, 0xED051CD4, 0xEC0C0202, 0x04FAFED5, 0xFE0606F8);
	r1 = D(r1, s1_2_1, 0xFD1403F5, 0xF2200411, 0xF50D07FA, 0x050ED9E4);
	r2 = D(r2, s1_2_1, 0xF2030AF2, 0x05F8F1F3, 0xFAFB0001, 0xF2FE09FF);
	r3 = D(r3, s1_2_1, 0xEA0BE5ED, 0x09F7E9F0, 0xFA08FEF8, 0xFCFF00F3);
	r4 = D(r4, s1_2_1, 0xFB050200, 0xF9FCF5D7, 0x01FA0208, 0xFFF7F6FD);
	r5 = D(r5, s1_2_1, 0xFCF90402, 0xFD0B1B08, 0x06F7FAF7, 0xFA0400FB);
	r6 = D(r6, s1_2_1, 0x02F9FDFE, 0x01020CF4, 0xF9F809FF, 0x01120DF7);
	r7 = D(r7, s1_2_1, 0xFD0802F5, 0x0002FBFD, 0xFA0809FF, 0xFD0509F4);
	r0 = D(r0, s1_2_2, 0xC721DC06, 0xFFFC01FC, 0xE60B0111, 0xFB040507);
	r1 = D(r1, s1_2_2, 0x0004FFFF, 0xCC34D908, 0xFF000300, 0xF5FEFAF5);
	r2 = D(r2, s1_2_2, 0xEA08FB00, 0xFA00FFFD, 0xF50101FD, 0xF807FDF9);
	r3 = D(r3, s1_2_2, 0xEBF808F2, 0xFF0202FC, 0xFD0101F4, 0xFE020100);
	r4 = D(r4, s1_2_2, 0xFE01FD01, 0xF10006F0, 0xFB05FF03, 0xFD0301FD);
	r5 = D(r5, s1_2_2, 0xF806FCFF, 0xFD03FF00, 0x03FAFFFC, 0xFC0105FA);
	r6 = D(r6, s1_2_2, 0xFDF806FD, 0xF20001FA, 0xFE000101, 0xF80606FF);
	r7 = D(r7, s1_2_2, 0xFFFE01FA, 0xFE0001FE, 0x000104FB, 0xFA0102FA);
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xEC0613F4, 0x030406FD, 0x0602F900, 0x01FF03FF);
	r1 = D(r1, s0_0_0, 0xF9FC00F9, 0xF00EFDF0, 0xFF010000, 0x0201FEFE);
	r2 = D(r2, s0_0_0, 0xFDFDFE00, 0xF500FF01, 0xFDFE02F9, 0x04060100);
	r3 = D(r3, s0_0_0, 0xDE0B010F, 0x0102FFFA, 0xFD0AFD06, 0xF8F907F7);
	r4 = D(r4, s0_0_0, 0xF2FBFF03, 0x040503FE, 0xFFFBF9FE, 0xFF05FCFB);
	r5 = D(r5, s0_0_0, 0xFF0001FF, 0x0906FA09, 0xEFFFFDF5, 0x05FCFDFA);
	r6 = D(r6, s0_0_0, 0xFF0203FB, 0x0202FEFD, 0xE6FEFFFB, 0xFD05FCF4);
	r7 = D(r7, s0_0_0, 0xF3FE04FD, 0xFD06FF02, 0xF60001F7, 0x00FFFFF9);
	r0 = D(r0, s0_0_1, 0xD1C8D332, 0xECF4F7F3, 0xFF09F8F9, 0xF2F8FFF7);
	r1 = D(r1, s0_0_1, 0xF70306FC, 0x1532FEF8, 0x02FC00FD, 0x020502FF);
	r2 = D(r2, s0_0_1, 0xF1F60003, 0xE7FFF511, 0xB4FFF001, 0xEFF7F4F6);
	r3 = D(r3, s0_0_1, 0xEDC9F400, 0xF50508F0, 0xFBFBFBF7, 0xFCF5E30F);
	r4 = D(r4, s0_0_1, 0xFCF6EE04, 0x0A040005, 0xED15F400, 0xFEFFFA04);
	r5 = D(r5, s0_0_1, 0xFD00FF01, 0x0C07F010, 0xFAFAF1F8, 0xFBFF00FF);
	r6 = D(r6, s0_0_1, 0xF001FBEC, 0xF80802F7, 0xE6FFF402, 0xF202FBEC);
	r7 = D(r7, s0_0_1, 0xFEFF07FC, 0x00F902FB, 0xEEFB07F5, 0xF9000301);
	r0 = D(r0, s0_0_2, 0x0BD9081B, 0xFB05F80D, 0xEFFE0105, 0xF100FFFE);
	r1 = D(r1, s0_0_2, 0xFE0B06FC, 0xE6030308, 0xFFFFFF00, 0xFE07FE02);
	r2 = D(r2, s0_0_2, 0x0000FF00, 0xFCF7F102, 0xF907F403, 0xF7FE820C);
	r3 = D(r3, s0_0_2, 0x0A020FFE, 0xFE0408FF, 0xFBFD09FE, 0xFEFCF703);
	r4 = D(r4, s0_0_2, 0xFEFF00FF, 0x00F7FD08, 0xFF13F900, 0xF802FAFF);
	r5 = D(r5, s0_0_2, 0x00FD0000, 0x08FBF001, 0xFAFAF906, 0x010204FE);
	r6 = D(r6, s0_0_2, 0xFEFEFD02, 0x05F809FD, 0xF9020502, 0xF805FFFB);
	r7 = D(r7, s0_0_2, 0xFD070201, 0xFDFF0300, 0xF9FD0AF9, 0xFA050803);
	r0 = D(r0, s0_1_0, 0xF30CE7F9, 0x05FDFA00, 0xF21CF80A, 0xFCF9FBFA);
	r1 = D(r1, s0_1_0, 0xEF05030B, 0xF4F2EAB7, 0xFDFAFFFE, 0xEAF706FF);
	r2 = D(r2, s0_1_0, 0xF907FAF5, 0x06F70905, 0x0108F405, 0x0308FB01);
	r3 = D(r3, s0_1_0, 0xE20000FF, 0x0E0BF8F3, 0xF5F8F410, 0x0DFFF6F5);
	r4 = D(r4, s0_1_0, 0xEFF0F4FA, 0x0901FAF8, 0xF7F7FFF7, 0xF7F3FDFD);
	r5 = D(r5, s0_1_0, 0xFAFC0104, 0xFEFEF909, 0xF904F1FE, 0xE3F3EDFF);
	r6 = D(r6, s0_1_0, 0xE7FBFFF3, 0xFBFFF8FB, 0xFC01F8FD, 0xE2F700FA);
	r7 = D(r7, s0_1_0, 0xDAF0D300, 0xF70D0803, 0xF4F3FDF1, 0xDE05E908);
	r0 = D(r0, s0_1_1, 0xCBD904C0, 0xA3F9D2FE, 0x00DC04FD, 0xEBEE1000);
	r1 = D(r1, s0_1_1, 0xE9F30BFF, 0xD8F513DC, 0xFBEEFEFF, 0xFBF5FFF6);
	r2 = D(r2, s0_1_1, 0xF1E7CA0C, 0xE6DE81DE, 0xE9E3D8FC, 0x03FFE4F2);
	r3 = D(r3, s0_1_1, 0x23B2E502, 0x08DFE2ED, 0xF5EA04FB, 0xF509F50F);
	r4 = D(r4, s0_1_1, 0xEEEBBC05, 0x1900B811, 0x04F1F0E2, 0xF7EDFC00);
	r5 = D(r5, s0_1_1, 0xFA0D0507, 0xFA17FD13, 0xFDEDF305, 0xF9080701);
	r6 = D(r6, s0_1_1, 0xE9E9E0FE, 0xBDDBFFF7, 0xDDE6D4EA, 0xFAE7F114);
	r7 = D(r7, s0_1_1, 0xFCFFFE03, 0x02F0FB03, 0xFEF1F912, 0xDDD1E8F0);
	r0 = D(r0, s0_1_2, 0x0B04F7FC, 0xF9F2EFF6, 0xEFFA0803, 0xEC03FCF9);
	r1 = D(r1, s0_1_2, 0xFCFDFF03, 0xCBFF3517, 0xFBFE0400, 0x010BF8F7);
	r2 = D(r2, s0_1_2, 0xE705F603, 0xF3DEF4F1, 0xF3FBE9FE, 0xFBF3BB04);
	r3 = D(r3, s0_1_2, 0x15E9F404, 0x04020E12, 0x01F30B09, 0xF6EEF900);
	r4 = D(r4, s0_1_2, 0xFB06FA01, 0x0017DEFB, 0x0ADBF515, 0xF8F20200);
	r5 = D(r5, s0_1_2, 0xFD01FCFF, 0xFDFDE5EB, 0x03F5FB04, 0xFC030104);
	r6 = D(r6, s0_1_2, 0xF804FC05, 0xE70AF0F7, 0x0008FE08, 0xEDF1FE17);
	r7 = D(r7, s0_1_2, 0x02FDFEFF, 0xFEFA0300, 0xF4F9FC06, 0x020100FE);
	r0 = D(r0, s0_2_0, 0xE614152B, 0x02FEFAFF, 0xF80A06FC, 0xFB00F904);
	r1 = D(r1, s0_2_0, 0x0504F6EF, 0xFEDDFCF6, 0xFF0200FF, 0xFD02F5FC);
	r2 = D(r2, s0_2_0, 0x0608FC07, 0x05FDFBFC, 0x01FF01FF, 0x0005FF02);
	r3 = D(r3, s0_2_0, 0x0202050E, 0xFD0400FD, 0xFFFE01FD, 0xFE00F905);
	r4 = D(r4, s0_2_0, 0x0205FC0F, 0x11ECFBE8, 0x03F7F900, 0x0002FA04);
	r5 = D(r5, s0_2_0, 0x02F7FEFF, 0x0CFDFA01, 0xFFFFFAFA, 0xE30BDF01);
	r6 = D(r6, s0_2_0, 0xFE09F203, 0xF7F905F7, 0xFE090900, 0x000CFC03);
	r7 = D(r7, s0_2_0, 0x0406E1F7, 0xFE0200FD, 0xFE0002FA, 0x080104FF);
	r0 = D(r0, s0_2_1, 0xEED9812F, 0xFC02FEE8, 0xEAFCE0F1, 0xF310FAF0);
	r1 = D(r1, s0_2_1, 0xF11705EF, 0xC5EEB9D6, 0xFB050803, 0xCB1B1103);
	r2 = D(r2, s0_2_1, 0x08FDDDF8, 0x04FEF90F, 0x060702FB, 0x01FEF602);
	r3 = D(r3, s0_2_1, 0xE4FCC8ED, 0x05FCE527, 0xF50CF3F7, 0x0800EF02);
	r4 = D(r4, s0_2_1, 0x02F405F0, 0xFC14D924, 0xF904F00B, 0x0DF4E702);
	r5 = D(r5, s0_2_1, 0x05E4FDFC, 0x070709DC, 0x00FDEE16, 0x03F9ED04);
	r6 = D(r6, s0_2_1, 0xFCFFE004, 0xF202F9C3, 0x0304F705, 0x040AD5AE);
	r7 = D(r7, s0_2_1, 0xFB04E905, 0x00FD0003, 0x0A05F8D6, 0xFB08E4FD);
	r0 = D(r0, s0_2_2, 0x810018EF, 0x0204FC12, 0xF00403F2, 0x010300EB);
	r1 = D(r1, s0_2_2, 0xF20FFEFD, 0xE1DAC081, 0x0001FDFE, 0xF3FC080F);
	r2 = D(r2, s0_2_2, 0xFEFCFCFA, 0x09FBF401, 0x06FFFFFE, 0x00FE0201);
	r3 = D(r3, s0_2_2, 0x1304FA0A, 0x04FBF90A, 0x02010010, 0xFCFDFFFA);
	r4 = D(r4, s0_2_2, 0xFF000205, 0xF3FCB1F4, 0xFF02FF05, 0x0EF5FBF3);
	r5 = D(r5, s0_2_2, 0x01EF0200, 0x0409F4FB, 0x0303010C, 0x0801FC00);
	r6 = D(r6, s0_2_2, 0x0600010E, 0x12FBF70F, 0x01FE0303, 0x0E04F3F0);
	r7 = D(r7, s0_2_2, 0x06020006, 0x00FF0101, 0x050400FA, 0xFF04FE04);
	r0 = D(r0, s1_0_0, 0x210BD605, 0x0702F9F9, 0xF9FFFAFD, 0x0EFFF7FA);
	r1 = D(r1, s1_0_0, 0x0803F708, 0x1AFE0015, 0x09FE0301, 0x0F0AFE00);
	r2 = D(r2, s1_0_0, 0xFE0BFD01, 0x0804FCFE, 0xFF0AF900, 0x04FFF7FF);
	r3 = D(r3, s1_0_0, 0xF40AFFFB, 0x04FE0203, 0x0100FFFF, 0x02000002);
	r4 = D(r4, s1_0_0, 0x071103FC, 0xF8FD0503, 0x0204FC04, 0x0803FFFA);
	r5 = D(r5, s1_0_0, 0x05FC0201, 0x0504FDFC, 0xFDFC0106, 0x0E000303);
	r6 = D(r6, s1_0_0, 0x0AFEFD01, 0x05F4FF03, 0x0A11FCFF, 0x1708F607);
	r7 = D(r7, s1_0_0, 0x0B12F909, 0x00FFFD00, 0x0CFAFE04, 0x0409FC03);
	r0 = D(r0, s1_0_1, 0xFC0D07E0, 0xFD010503, 0x08FA04F5, 0x09F80009);
	r1 = D(r1, s1_0_1, 0x1401FE02, 0x352AED1A, 0x05FC0202, 0x1006FF00);
	r2 = D(r2, s1_0_1, 0x0502FF01, 0x10FBF9F6, 0x001B0301, 0x07040101);
	r3 = D(r3, s1_0_1, 0x0C08EDF7, 0xFFF70121, 0x05010305, 0x000C03F9);
	r4 = D(r4, s1_0_1, 0x04FD03FD, 0xFB010508, 0xFC010100, 0x0601FCF4);
	r5 = D(r5, s1_0_1, 0x05FE0400, 0x0713F8DF, 0x00FD01FD, 0x05050209);
	r6 = D(r6, s1_0_1, 0xFEFBFC05, 0x0E050301, 0x0308F901, 0x1E140001);
	r7 = D(r7, s1_0_1, 0x0604060B, 0x09FB0203, 0x0603FA10, 0x0C120005);
	r0 = D(r0, s1_0_2, 0xFA0CF0D8, 0x0103FAEC, 0x060FF9FE, 0x0606F8FF);
	r1 = D(r1, s1_0_2, 0x07FA02FB, 0x330B16F2, 0x0CFF0302, 0xF90400F5);
	r2 = D(r2, s1_0_2, 0x0205FEFC, 0x0706F6F1, 0x0106F5F4, 0x11FB01F6);
	r3 = D(r3, s1_0_2, 0x100C06FF, 0x00FA040D, 0x0AF9040A, 0x090502F3);
	r4 = D(r4, s1_0_2, 0x0804FD03, 0xF704FFFA, 0x050308FF, 0x0D0605FA);
	r5 = D(r5, s1_0_2, 0x070104FF, 0x0504F9F1, 0x01F9FEFB, 0xFFFD0401);
	r6 = D(r6, s1_0_2, 0xFEFEFAFB, 0x0215FA03, 0x070BFBFD, 0x16030AF7);
	r7 = D(r7, s1_0_2, 0xFC0001FC, 0x07FE0103, 0x10020305, 0x01FE02FF);
	r0 = D(r0, s1_1_0, 0x14051808, 0x090AFFFC, 0x0FFF04F5, 0x07FF0704);
	r1 = D(r1, s1_1_0, 0xFC05FF00, 0xEE29E4F4, 0x07FDFA02, 0xF90AFE06);
	r2 = D(r2, s1_1_0, 0xF404F401, 0x0000FBFE, 0x030C04FF, 0x140004F8);
	r3 = D(r3, s1_1_0, 0xFB0005FF, 0x04F60704, 0xFFFC01FA, 0xFF02FA05);
	r4 = D(r4, s1_1_0, 0x02FAE405, 0xFC03F8FC, 0x01090B0D, 0x0001F508);
	r5 = D(r5, s1_1_0, 0x0609F900, 0x0115FFFD, 0x0D03FBFA, 0xFB1AF60E);
	r6 = D(r6, s1_1_0, 0xF903FE08, 0x1309FF07, 0xFB03FB06, 0x080EF006);
	r7 = D(r7, s1_1_0, 0xF620000B, 0x06FA03F9, 0xFE02F311, 0x0008FD04);
	r0 = D(r0, s1_1_1, 0xBD150EFD, 0x2E140113, 0x102BF71A, 0x1015F916);
	r1 = D(r1, s1_1_1, 0x12F8FE1F, 0x1312F9F1, 0x0A1FFA0B, 0x041CFD04);
	r2 = D(r2, s1_1_1, 0xF92610FC, 0x1309E107, 0x0CFDFF09, 0xF9FFDD03);
	r3 = D(r3, s1_1_1, 0xFF130213, 0x1228D0B4, 0x04010F17, 0x110519F9);
	r4 = D(r4, s1_1_1, 0xEF180EEF, 0xF416FCF7, 0x090AF02E, 0xFC180803);
	r5 = D(r5, s1_1_1, 0x0408F9E8, 0xFEE3375E, 0xF0F5FE13, 0x00160601);
	r6 = D(r6, s1_1_1, 0xFA0CFD13, 0xFA0AE115, 0xEF0E0E0F, 0xEF17E30E);
	r7 = D(r7, s1_1_1, 0xFC0D0000, 0xFDFF010F, 0xEC06FE16, 0xF0230609);
	r0 = D(r0, s1_1_2, 0xF9140BF7, 0x0CF3FDF6, 0xFFF104F3, 0xF6020AF7);
	r1 = D(r1, s1_1_2, 0x120AF9FA, 0x103603E6, 0x0AFFFEFF, 0x0C0201F4);
	r2 = D(r2, s1_1_2, 0x0504FDF1, 0xEB0A0608, 0x010D06FC, 0x070B0AF6);
	r3 = D(r3, s1_1_2, 0x111A0CF9, 0xFAF6FD2D, 0xFF03FF0F, 0x121104ED);
	r4 = D(r4, s1_1_2, 0x010506FC, 0x0F09F2EB, 0xF5010C01, 0xFE0D05F4);
	r5 = D(r5, s1_1_2, 0x010BFCF6, 0x0D0E06D9, 0x06F5FA09, 0x0801F8FE);
	r6 = D(r6, s1_1_2, 0x0BF3FE04, 0xF109FFF9, 0x0A0B03FD, 0x091CF4E5);
	r7 = D(r7, s1_1_2, 0x07FF0301, 0x06FFFF02, 0x07FDF8FC, 0x0806FD06);
	r0 = D(r0, s1_2_0, 0x190D080C, 0xFA01F4FF, 0xFF07F905, 0xFCFDFA0B);
	r1 = D(r1, s1_2_0, 0xFBFEFFFC, 0x0100ECF1, 0x06FBFC03, 0x0704FC02);
	r2 = D(r2, s1_2_0, 0xFC020604, 0xF5050001, 0xF7FFFB04, 0x04010002);
	r3 = D(r3, s1_2_0, 0xF207FAFE, 0x0B010105, 0x00FFFDFA, 0x0AFEFCFF);
	r4 = D(r4, s1_2_0, 0x0905FD00, 0xF804030E, 0xFDFDFD02, 0x0200FCFB);
	r5 = D(r5, s1_2_0, 0xF7FC00FF, 0xF600FEFC, 0x0003FD00, 0xFF06FD03);
	r6 = D(r6, s1_2_0, 0x08FEFF00, 0xFA03F10E, 0xFEFF0101, 0x05F703FB);
	r7 = D(r7, s1_2_0, 0xFD01FDF8, 0x0001FE00, 0x04F70502, 0x00040102);
	r0 = D(r0, s1_2_1, 0xE80B0EF2, 0x04F40201, 0xEDF71D00, 0x040111FB);
	r1 = D(r1, s1_2_1, 0xF6010CF7, 0x04EC0213, 0xECF005F9, 0xFC06050D);
	r2 = D(r2, s1_2_1, 0x06FEFEFF, 0x0106EF0C, 0xFB0502FA, 0x0504FD02);
	r3 = D(r3, s1_2_1, 0xF6FD1605, 0x0FFBF605, 0xF8FA0903, 0xF9FDFD02);
	r4 = D(r4, s1_2_1, 0x01FF0302, 0x1A07F915, 0x06FFFF00, 0xFFFEF608);
	r5 = D(r5, s1_2_1, 0x04F9E80B, 0xF00609F8, 0x1602F403, 0xFB0BFB04);
	r6 = D(r6, s1_2_1, 0xFD08FAFE, 0xF6010E03, 0x0205FAFC, 0x10F2FA09);
	r7 = D(r7, s1_2_1, 0xF9030604, 0x02FD02FF, 0xF8FB03F9, 0x000402FC);
	r0 = D(r0, s1_2_2, 0xF8FAED1D, 0x1200F3FC, 0xFD02F809, 0x07F8FFFB);
	r1 = D(r1, s1_2_2, 0x08030403, 0xFA0DF200, 0x07FCFA00, 0x0010FF02);
	r2 = D(r2, s1_2_2, 0x03020405, 0x0AFCFCFB, 0xF7FFFDFF, 0x0203FBFF);
	r3 = D(r3, s1_2_2, 0x0503FDF8, 0x00010104, 0x0BF70003, 0xF603FDFA);
	r4 = D(r4, s1_2_2, 0x00010001, 0xFC1005FE, 0xFBFB0002, 0xFCF8FFFD);
	r5 = D(r5, s1_2_2, 0x01FEF802, 0x06FE01FD, 0x0CFB03FA, 0x0D0001FE);
	r6 = D(r6, s1_2_2, 0x0BF904FD, 0x0710FAF8, 0x00000003, 0x10F2FD03);
	r7 = D(r7, s1_2_2, 0x0604FE00, 0x06FF0001, 0x02F903FB, 0x010A0202);
	s0_0_0 = G[6][xy.y+0][xy.x+0]; s0_0_1 = G[6][xy.y+0][xy.x+1];
	s0_0_2 = G[6][xy.y+0][xy.x+2]; s0_1_0 = G[6][xy.y+1][xy.x+0];
	s0_1_1 = G[6][xy.y+1][xy.x+1]; s0_1_2 = G[6][xy.y+1][xy.x+2];
	s0_2_0 = G[6][xy.y+2][xy.x+0]; s0_2_1 = G[6][xy.y+2][xy.x+1];
	s0_2_2 = G[6][xy.y+2][xy.x+2]; s1_0_0 = G[7][xy.y+0][xy.x+0];
	s1_0_1 = G[7][xy.y+0][xy.x+1]; s1_0_2 = G[7][xy.y+0][xy.x+2];
	s1_1_0 = G[7][xy.y+1][xy.x+0]; s1_1_1 = G[7][xy.y+1][xy.x+1];
	s1_1_2 = G[7][xy.y+1][xy.x+2]; s1_2_0 = G[7][xy.y+2][xy.x+0];
	s1_2_1 = G[7][xy.y+2][xy.x+1]; s1_2_2 = G[7][xy.y+2][xy.x+2];
	r0 = D(r0, s0_0_0, 0xF0373818, 0xF8050205, 0xF90705FF, 0xF5040B03);
	r1 = D(r1, s0_0_0, 0x07040000, 0x0927ECF5, 0xFDFBFF02, 0x05FFFEFD);
	r2 = D(r2, s0_0_0, 0x03FF05FA, 0x00F30AF8, 0x08F80107, 0x030D0101);
	r3 = D(r3, s0_0_0, 0x011BF409, 0x00010002, 0x02FAF705, 0xFFF70302);
	r4 = D(r4, s0_0_0, 0x06FD07F9, 0xFDFAFE03, 0x0900F7FF, 0xFEFF09FE);
	r5 = D(r5, s0_0_0, 0xFFFFFDFC, 0x030302FA, 0xFAFA00FD, 0x0002FC08);
	r6 = D(r6, s0_0_0, 0xFD060403, 0xFB020A04, 0x04F10203, 0x0606EB08);
	r7 = D(r7, s0_0_0, 0x00010503, 0x0DF0FE03, 0xFD03FA03, 0x080008F6);
	r0 = D(r0, s0_0_1, 0x2E1DE1D8, 0xFF0600F2, 0xF5F610FE, 0xF804FD08);
	r1 = D(r1, s0_0_1, 0x0600F805, 0xEAE1D81F, 0x02010800, 0xFC030300);
	r2 = D(r2, s0_0_1, 0x04FD02F9, 0xFDFE04F8, 0x02DB07EF, 0x060202F6);
	r3 = D(r3, s0_0_1, 0x040320F9, 0xFC03F707, 0xFAF303FC, 0x07F212EF);
	r4 = D(r4, s0_0_1, 0xFEF701FD, 0x04F90206, 0xFFF7FC07, 0xF70402FB);
	r5 = D(r5, s0_0_1, 0x0301FCFE, 0xFA010FF8, 0xFBFD09FE, 0x00FD0105);
	r6 = D(r6, s0_0_1, 0x000BFF01, 0xFEFAF811, 0xFDE9FBF2, 0x0BF5EA16);
	r7 = D(r7, s0_0_1, 0x0301FE04, 0x0006F6F7, 0xFD00F205, 0x0107FA00);
	r0 = D(r0, s0_0_2, 0xFB2D1D1E, 0xFB0309FE, 0xFEEEFCF6, 0xFB07FDFD);
	r1 = D(r1, s0_0_2, 0x01FE0304, 0x0E2D0FF4, 0xFFFE0201, 0xFEFC0000);
	r2 = D(r2, s0_0_2, 0x0006FF05, 0x02EBFBFA, 0xFEF8FB02, 0xFDCDFFFD);
	r3 = D(r3, s0_0_2, 0x0829F3FB, 0xFE020304, 0x070AFF01, 0xF9020103);
	r4 = D(r4, s0_0_2, 0xFF080107, 0x01F4FF00, 0xFB0A0AFE, 0xFAFD00FF);
	r5 = D(r5, s0_0_2, 0x0303FDFD, 0xFBFCF7FB, 0xFDEFFE00, 0x000200FB);
	r6 = D(r6, s0_0_2, 0xFFF902F7, 0x05FAF0EE, 0x01FB03FF, 0xFE1D0100);
	r7 = D(r7, s0_0_2, 0xFCFA0201, 0xFF010002, 0x030AFAFA, 0x00010201);
	r0 = D(r0, s0_1_0, 0x09E90BD5, 0x01FC0CFC, 0xED140705, 0xF4F91004);
	r1 = D(r1, s0_1_0, 0xF7F20DFB, 0xF8E80D27, 0xF804FE02, 0xFA1916E4);
	r2 = D(r2, s0_1_0, 0x02110AF4, 0xFE11F30E, 0x00FA0FF8, 0x02F70307);
	r3 = D(r3, s0_1_0, 0xF8F2E30F, 0x050207FB, 0xECF7F512, 0x02F30FFC);
	r4 = D(r4, s0_1_0, 0xF1FE0CF2, 0x05EA1001, 0x260808F3, 0xFE0504FC);
	r5 = D(r5, s0_1_0, 0x01F6FF05, 0xEFF9F8FE, 0xF905ED0E, 0xF50F1BE2);
	r6 = D(r6, s0_1_0, 0xFCF709F9, 0x0A0F05F5, 0xF1FEF7FA, 0x12E7031C);
	r7 = D(r7, s0_1_0, 0x11DA1BEA, 0x0800EE0D, 0x0CF80302, 0x0EF2F501);
	r0 = D(r0, s0_1_1, 0x1DCBFFE5, 0xFFC6E0FB, 0x00F8C8EA, 0x06FE0AF0);
	r1 = D(r1, s0_1_1, 0xDAFF0CF4, 0xECD1E4DC, 0xF20EED02, 0xF41FE310);
	r2 = D(r2, s0_1_1, 0x17E105F6, 0x0C0FE715, 0x1C14D4FF, 0x02EC14F0);
	r3 = D(r3, s0_1_1, 0xF2EC22EF, 0xB2FDF7D7, 0x1CE50AF2, 0xFAE407F4);
	r4 = D(r4, s0_1_1, 0x0DF21605, 0xFEF01DED, 0x201D1CE3, 0x0D08FC0B);
	r5 = D(r5, s0_1_1, 0xF9F31204, 0x2EF1FB23, 0x0811F505, 0x00E0F4F4);
	r6 = D(r6, s0_1_1, 0x03EEF1FB, 0x00DFFED8, 0x14050C01, 0xE5C91114);
	r7 = D(r7, s0_1_1, 0xFF02EBFA, 0xEEF409F6, 0xDFE61B02, 0xE1DA20ED);
	r0 = D(r0, s0_1_2, 0xBF2C17F0, 0xF5050AFC, 0xFA010BFB, 0xF6F70C00);
	r1 = D(r1, s0_1_2, 0x0D06F703, 0x090706EA, 0xF805FE01, 0x0B0A0EFE);
	r2 = D(r2, s0_1_2, 0xF6FAFFFB, 0xFF13FA07, 0xFAFE0BF9, 0x0A0AFC0B);
	r3 = D(r3, s0_1_2, 0x190EDCD7, 0x1D02E4F5, 0x0DFBEBF4, 0xF5041207);
	r4 = D(r4, s0_1_2, 0xFAFFFEFC, 0xF4CB0004, 0xF90FF5FD, 0xF9FF0F04);
	r5 = D(r5, s0_1_2, 0xF8F90401, 0xEA001C01, 0xFF13EDFE, 0xF9000603);
	r6 = D(r6, s0_1_2, 0x0709F3FA, 0xF6021406, 0xF9FEFCF8, 0xE7FB2707);
	r7 = D(r7, s0_1_2, 0x020802FE, 0x0805FB02, 0xF2FA0D06, 0x0705F9FB);
	r0 = D(r0, s0_2_0, 0xE9110005, 0x05090E02, 0x09FD14F6, 0xFF0BF7FE);
	r1 = D(r1, s0_2_0, 0xE90BFFFA, 0xF02C12FD, 0x1203F50B, 0xEF0DFF06);
	r2 = D(r2, s0_2_0, 0x08ECFD0A, 0x09F30209, 0xF8030000, 0xFD03FB0B);
	r3 = D(r3, s0_2_0, 0xF3230615, 0xF6F6FE08, 0xFC0C0303, 0xF903010B);
	r4 = D(r4, s0_2_0, 0x03F10105, 0xF31700EC, 0xF1FCF904, 0xFEF4FE0F);
	r5 = D(r5, s0_2_0, 0xF802FF06, 0x110A02EC, 0x01F4FB01, 0x11FAE6F7);
	r6 = D(r6, s0_2_0, 0xECFFF001, 0x13F3E404, 0x04F8FDFD, 0x011CED05);
	r7 = D(r7, s0_2_0, 0xE201FEFA, 0xFA01FA04, 0xF4F9F8FB, 0xEB000F00);
	r0 = D(r0, s0_2_1, 0xFF1CFC12, 0xEC0ADC02, 0x04F9F50D, 0xEF0EF0FF);
	r1 = D(r1, s0_2_1, 0xFFFC00F7, 0xD2F71F0D, 0x1405E710, 0x140308FE);
	r2 = D(r2, s0_2_1, 0xF7E406F5, 0x0EEB0D12, 0xFF020BFF, 0xEE01FFF9);
	r3 = D(r3, s0_2_1, 0xF8050CF4, 0x0E05100C, 0x12FAF903, 0xF6F50703);
	r4 = D(r4, s0_2_1, 0x06F6FFFB, 0x0D47DFBB, 0x04FEFD09, 0xF9ED0F03);
	r5 = D(r5, s0_2_1, 0x02F20DFC, 0xE6FBEAF6, 0x07FB09FF, 0xEBF50FFB);
	r6 = D(r6, s0_2_1, 0x03EA0BF5, 0xEAEED4FA, 0xFCFD07FF, 0xF2FCE004);
	r7 = D(r7, s0_2_1, 0x10090B08, 0x03F902FE, 0xDB04F4FF, 0x1305F8FA);
	r0 = D(r0, s0_2_2, 0xB6372CFE, 0xEDF20A06, 0x040806FF, 0x0106FEFF);
	r1 = D(r1, s0_2_2, 0xF1050E00, 0xF11C0451, 0x0D0CFE04, 0xE2E80D02);
	r2 = D(r2, s0_2_2, 0x050C0405, 0xF0F10E00, 0x09FAFB03, 0x05FC03FF);
	r3 = D(r3, s0_2_2, 0x01FCF40D, 0xFCF8FB03, 0xF2FDFF04, 0x08FE0400);
	r4 = D(r4, s0_2_2, 0xFA080302, 0xF515190C, 0xFCFE0A02, 0xFBEDFE03);
	r5 = D(r5, s0_2_2, 0xF4FC010A, 0x0406FDF7, 0xF7FA030C, 0xFDFEFDF9);
	r6 = D(r6, s0_2_2, 0xF7F8030B, 0x07F4FFF2, 0x03F90005, 0x070EE9FB);
	r7 = D(r7, s0_2_2, 0x04FEFFF8, 0x0802FC02, 0x0BFEF9FA, 0x020105FD);
	r0 = D(r0, s1_0_0, 0xF1190420, 0xF9060203, 0x1503F813, 0xF910FC05);
	r1 = D(r1, s1_0_0, 0x09000BFC, 0xBCF6EE00, 0xFEFFFE00, 0xFB0000FD);
	r2 = D(r2, s1_0_0, 0xFA080300, 0xFAFBF70A, 0xFC0EFBFD, 0xF6020004);
	r3 = D(r3, s1_0_0, 0x1015F901, 0xFF09FEFF, 0x0405F9FD, 0xF60C04F4);
	r4 = D(r4, s1_0_0, 0xF8FF0304, 0x0406F7FF, 0x02F1FE08, 0x03FE0005);
	r5 = D(r5, s1_0_0, 0x01FE0202, 0xFBF5FF05, 0xFA03FC05, 0xF70103FE);
	r6 = D(r6, s1_0_0, 0xFB030105, 0xFB02FB02, 0xFB09FCFF, 0xFE0700FD);
	r7 = D(r7, s1_0_0, 0xF80607FA, 0x01FFFCFD, 0x04090BF6, 0x00FFFF02);
	r0 = D(r0, s1_0_1, 0xF19BE82E, 0x1101FC0C, 0xF707F5FF, 0xEEF90D01);
	r1 = D(r1, s1_0_1, 0xEE0703FB, 0xD8FC0609, 0x0205FD01, 0xF8FAFE0A);
	r2 = D(r2, s1_0_1, 0xFCF40105, 0xFFEF0006, 0xFDE8F80E, 0x070606FA);
	r3 = D(r3, s1_0_1, 0xE1F60522, 0xE70708FD, 0xFFF70106, 0x04F001FF);
	r4 = D(r4, s1_0_1, 0x0BF8FD03, 0xFC09FCF4, 0xF5000909, 0x01F8FE04);
	r5 = D(r5, s1_0_1, 0x01FA0100, 0x13F2F30B, 0x0F08FB05, 0x00FA0303);
	r6 = D(r6, s1_0_1, 0x090606FC, 0xEA050AFC, 0x0A030C04, 0xF50C0911);
	r7 = D(r7, s1_0_1, 0xF4FFFDFC, 0xFCFA0106, 0xED0317FC, 0xF10303FB);
	r0 = D(r0, s1_0_2, 0xBF040EF7, 0x05FDFC03, 0x0BF7FE00, 0x1008FCFC);
	r1 = D(r1, s1_0_2, 0xFF030403, 0xFE03121B, 0xFEFF01FC, 0x0F04F90A);
	r2 = D(r2, s1_0_2, 0xFEFC04FF, 0x05FC0005, 0xFBFD00FA, 0xF9E3EC05);
	r3 = D(r3, s1_0_2, 0x06E8000C, 0xF9FEFD02, 0xF50002FC, 0x010A0004);
	r4 = D(r4, s1_0_2, 0xF9FF0405, 0xFE03F807, 0x02FB0003, 0xFE0304FE);
	r5 = D(r5, s1_0_2, 0xFFFF0003, 0x04F9FD02, 0x0206FDFB, 0xFD010102);
	r6 = D(r6, s1_0_2, 0x03FE02FF, 0x05F1000C, 0xF7FE03FC, 0xE2FE0806);
	r7 = D(r7, s1_0_2, 0x0803FD04, 0x000301FE, 0xF8FC06FF, 0xFD01FE02);
	r0 = D(r0, s1_1_0, 0x33FCFA16, 0x0407FE05, 0xEFF901FD, 0x0D10050C);
	r1 = D(r1, s1_1_0, 0xE7F0FEF7, 0x88861BFE, 0xFD020504, 0xDBFC0005);
	r2 = D(r2, s1_1_0, 0xFC15FFF8, 0xFBFF05F8, 0x0A05FA0D, 0x0C00010A);
	r3 = D(r3, s1_1_0, 0xFE04038D, 0x0C04F60D, 0xFF01FBE7, 0x0110FC02);
	r4 = D(r4, s1_1_0, 0x050C0EF1, 0xEA07F913, 0xFAEB0001, 0xFEF90AEF);
	r5 = D(r5, s1_1_0, 0xFFF8FD01, 0xEAF704FB, 0xFD0005FD, 0xFC06FFFB);
	r6 = D(r6, s1_1_0, 0x030FFAFA, 0x01080902, 0xF81308DD, 0xD7F1F901);
	r7 = D(r7, s1_1_0, 0x10DEDDF1, 0xFEF802E4, 0x0102F609, 0xFC0CFDEA);
	r0 = D(r0, s1_1_1, 0xF39AE6B5, 0x07EDFAD3, 0xFAE1F2ED, 0x09E2FFE5);
	r1 = D(r1, s1_1_1, 0xD0E21601, 0x81D5F4DB, 0xFFF70704, 0xB9EF1403);
	r2 = D(r2, s1_1_1, 0xF3C7F9E3, 0xF0FAF005, 0xEEF414A6, 0x0A1204EF);
	r3 = D(r3, s1_1_1, 0xFB94D5AD, 0xE7E425F0, 0x00FDDCE3, 0xFFE10FE3);
	r4 = D(r4, s1_1_1, 0x03EBF1E1, 0x0AF50B2B, 0x03CFF9EF, 0x07E8D806);
	r5 = D(r5, s1_1_1, 0x05E9000B, 0x0F02E516, 0x04EFF8FC, 0x01060004);
	r6 = D(r6, s1_1_1, 0x04FBEFD7, 0x05E0F9F9, 0xF4B6EBDB, 0x0281ECF0);
	r7 = D(r7, s1_1_1, 0xF7021A01, 0xFEEFFFFB, 0x00EDF705, 0x0DBD08FF);
	r0 = D(r0, s1_1_2, 0x0A0AEC81, 0xEBEFEFE0, 0x09ECFB03, 0x04EDEFEC);
	r1 = D(r1, s1_1_2, 0xF0F90A13, 0x8120EC0C, 0x02FC030A, 0xF6020901);
	r2 = D(r2, s1_1_2, 0x0603FDFB, 0xFDECF7FE, 0x0517F0EB, 0xFADEEDC4);
	r3 = D(r3, s1_1_2, 0xFBEEF205, 0xF6140D00, 0xF9041000, 0x0201EAE9);
	r4 = D(r4, s1_1_2, 0xFF020500, 0x05F4EE1B, 0x05EBF90E, 0x04FBFB06);
	r5 = D(r5, s1_1_2, 0x04FDFC07, 0x05E2F7F9, 0xF4FE080D, 0x0604FD04);
	r6 = D(r6, s1_1_2, 0xEDF2FEFE, 0x02F3F0F3, 0xFD10FE00, 0x14F5EC19);
	r7 = D(r7, s1_1_2, 0xFE040106, 0x01030201, 0x0B01F509, 0xFC0F05FF);
	r0 = D(r0, s1_2_0, 0x16E20110, 0xFF10FFEF, 0x10F8FA04, 0x000FFCF6);
	r1 = D(r1, s1_2_0, 0xFB0008FE, 0x3AE62005, 0xFE02FEF7, 0x05030BF3);
	r2 = D(r2, s1_2_0, 0x15F7F917, 0x12040209, 0x03FE01FE, 0x03FD05FE);
	r3 = D(r3, s1_2_0, 0xE70809E8, 0x0F03FEFF, 0xF20605F7, 0x0C0B0203);
	r4 = D(r4, s1_2_0, 0x0A04FF0F, 0xF10D04FB, 0xF402FC01, 0x0108FE06);
	r5 = D(r5, s1_2_0, 0x04030103, 0xE9F80002, 0x090B0602, 0xF6100BE4);
	r6 = D(r6, s1_2_0, 0xFA0606EB, 0xF60AFEE8, 0xFFFF0207, 0xFD090BF6);
	r7 = D(r7, s1_2_0, 0xF80F09F4, 0xFE0202F7, 0xF80504FE, 0xFB020009);
	r0 = D(r0, s1_2_1, 0xD01403CA, 0xFA1300F0, 0xFCEDEDE4, 0xF7EF01EF);
	r1 = D(r1, s1_2_1, 0xEAF3F2ED, 0x3605E6F1, 0xFF9CF6FE, 0xC184F4DE);
	r2 = D(r2, s1_2_1, 0xF6080BF1, 0xF912FEF0, 0x0503FE06, 0xFB0E0401);
	r3 = D(r3, s1_2_1, 0x1BD6FC06, 0x0614F212, 0x06F9FFF3, 0xFC1108FE);
	r4 = D(r4, s1_2_1, 0xF9FD00F5, 0xEBF624CA, 0x0301FBFF, 0x010B06FC);
	r5 = D(r5, s1_2_1, 0x001404F7, 0xF0E50BF7, 0x0022FFFA, 0x00EF0AFA);
	r6 = D(r6, s1_2_1, 0x0801FC03, 0x0004F7F5, 0x050905FE, 0x02FDF60C);
	r7 = D(r7, s1_2_1, 0xF9FFFAEB, 0x0201FFFD, 0x04070102, 0xF8F901E8);
	r0 = D(r0, s1_2_2, 0xF7E3E1C3, 0x0403FD0B, 0x020102EE, 0x0002FBFD);
	r1 = D(r1, s1_2_2, 0xF70106F1, 0xEBCEE6FC, 0xFEFAF9FA, 0x01E8060A);
	r2 = D(r2, s1_2_2, 0x02FDEDF2, 0x0910F707, 0x02FCFDFF, 0x05F9FCFF);
	r3 = D(r3, s1_2_2, 0xF1F1FD12, 0xFF02FB08, 0xFF000600, 0xFA02FCFB);
	r4 = D(r4, s1_2_2, 0x0003FDFA, 0xF8FD0AEF, 0x01F6FBF9, 0x00FE0505);
	r5 = D(r5, s1_2_2, 0x00FD00FF, 0xFEF20801, 0xFD170202, 0xFEFC0202);
	r6 = D(r6, s1_2_2, 0x010B060D, 0xFFF7170A, 0x03FEFEFD, 0xFDFEFEF2);
	r7 = D(r7, s1_2_2, 0x00FA0000, 0xFFFD0300, 0xFE030700, 0x0205FEF8);
	f0 = vec4(r0) * 6.2000124e-05;
	f0 += vec4(-6.067e-02, -8.529e-03, -1.303e-02, -1.552e-02);
	f0 = clamp(f0, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 0), f0);
	f1 = vec4(r1) * 6.2000124e-05;
	f1 += vec4(-7.187e-03, -5.414e-02, -1.740e-03, -9.077e-03);
	f1 = clamp(f1, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 0), f1);
	f2 = vec4(r2) * 6.2000124e-05;
	f2 += vec4(-1.167e-02, -1.586e-03, -1.010e-02, -7.037e-03);
	f2 = clamp(f2, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(0, 1), f2);
	f3 = vec4(r3) * 6.2000124e-05;
	f3 += vec4(-1.625e-02, -9.065e-03, -9.542e-03, -8.432e-03);
	f3 = clamp(f3, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(1, 1), f3);
	f4 = vec4(r4) * 6.2000124e-05;
	f4 += vec4(-6.466e-03, -1.974e-02, -7.436e-03, -8.881e-03);
	f4 = clamp(f4, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 0), f4);
	f5 = vec4(r5) * 6.2000124e-05;
	f5 += vec4(-9.855e-04, -9.895e-03, -5.161e-03, -6.668e-03);
	f5 = clamp(f5, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 0), f5);
	f6 = vec4(r6) * 6.2000124e-05;
	f6 += vec4(-9.653e-03, -1.499e-02, -2.422e-03, -1.006e-02);
	f6 = clamp(f6, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(2, 1), f6);
	f7 = vec4(r7) * 6.2000124e-05;
	f7 += vec4(-6.590e-03, -3.492e-03, -1.069e-02, -8.942e-03);
	f7 = clamp(f7, vec4(0.0), vec4(1.0));
	imageStore(out_image, opos + ivec2(3, 1), f7);
}

//!DESC [CuNNy_4x32_DS_vk] -out-shuffle
//!HOOK LUMA
//!COMPUTE 16 16 8 8
//!BIND conv4
//!BIND LUMA
//!WIDTH LUMA.w 2 *
//!HEIGHT LUMA.h 2 *
//!COMPONENTS 1
//!WHEN OUTPUT.w LUMA.w 1.200 * > OUTPUT.h LUMA.h 1.200 * > *
#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
#ifdef GL_EXT_shader_explicit_arithmetic_types_float16
#	define V4 f16vec4
#	define M4 f16mat4
#	define F float16_t
#else
#	define V4 vec4
#	define M4 mat4
#	define F float
#endif
shared V4 G[8][10][10];
void hook() {
	ivec2 xy = ivec2(gl_LocalInvocationID.xy);
	ivec2 pos = ivec2(gl_WorkGroupID.xy) * ivec2(8, 8) + xy;
	ivec2 opos = pos * ivec2(2, 2);
	ivec2 sz = ivec2(LUMA_size) - ivec2(1);
	for (int y = 0; y < 10; y += 8) {
		int ay = xy.y + y;
		if (ay >= 10) break;
		for (int x = 0; x < 10; x += 8) {
			int ax = xy.x + x;
			if (ax >= 10) break;
			vec2 p;
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(1, 1)) * conv4_pt;
			V4 sr0 = V4(conv4_gather(p, 0));
			V4 sg0 = V4(conv4_gather(p, 1));
			V4 sb0 = V4(conv4_gather(p, 2));
			V4 sa0 = V4(conv4_gather(p, 3));
			G[0][ay][ax] = V4(sr0.w, sg0.w, sb0.w, sa0.w);
			G[1][ay][ax] = V4(sr0.z, sg0.z, sb0.z, sa0.z);
			G[2][ay][ax] = V4(sr0.x, sg0.x, sb0.x, sa0.x);
			G[3][ay][ax] = V4(sr0.y, sg0.y, sb0.y, sa0.y);
			p = vec2(clamp(pos + ivec2(x - 1, y - 1), ivec2(0), sz) * ivec2(4, 2) + ivec2(3, 1)) * conv4_pt;
			V4 sr1 = V4(conv4_gather(p, 0));
			V4 sg1 = V4(conv4_gather(p, 1));
			V4 sb1 = V4(conv4_gather(p, 2));
			V4 sa1 = V4(conv4_gather(p, 3));
			G[4][ay][ax] = V4(sr1.w, sg1.w, sb1.w, sa1.w);
			G[5][ay][ax] = V4(sr1.z, sg1.z, sb1.z, sa1.z);
			G[6][ay][ax] = V4(sr1.x, sg1.x, sb1.x, sa1.x);
			G[7][ay][ax] = V4(sr1.y, sg1.y, sb1.y, sa1.y);
		}
	}
	barrier();
	V4 s0_0_0, s0_0_1, s0_0_2, s0_1_0, s0_1_1, s0_1_2, s0_2_0, s0_2_1, s0_2_2, s1_0_0, s1_0_1, s1_0_2, s1_1_0, s1_1_1, s1_1_2, s1_2_0, s1_2_1, s1_2_2;
	V4 r0;
	r0 = V4(0.0);
	s0_0_0 = G[0][xy.y+0][xy.x+0]; s0_0_1 = G[0][xy.y+0][xy.x+1];
	s0_0_2 = G[0][xy.y+0][xy.x+2]; s0_1_0 = G[0][xy.y+1][xy.x+0];
	s0_1_1 = G[0][xy.y+1][xy.x+1]; s0_1_2 = G[0][xy.y+1][xy.x+2];
	s0_2_0 = G[0][xy.y+2][xy.x+0]; s0_2_1 = G[0][xy.y+2][xy.x+1];
	s0_2_2 = G[0][xy.y+2][xy.x+2]; s1_0_0 = G[1][xy.y+0][xy.x+0];
	s1_0_1 = G[1][xy.y+0][xy.x+1]; s1_0_2 = G[1][xy.y+0][xy.x+2];
	s1_1_0 = G[1][xy.y+1][xy.x+0]; s1_1_1 = G[1][xy.y+1][xy.x+1];
	s1_1_2 = G[1][xy.y+1][xy.x+2]; s1_2_0 = G[1][xy.y+2][xy.x+0];
	s1_2_1 = G[1][xy.y+2][xy.x+1]; s1_2_2 = G[1][xy.y+2][xy.x+2];
	r0 += M4(-1.487e-02, 3.479e-03, -1.642e-02, 4.114e-03, 3.182e-02, -1.544e-03, 3.750e-03, -6.407e-04, -8.518e-03, 3.874e-03, 5.890e-03, 1.427e-03, -3.110e-02, -7.502e-04, -5.143e-03, 8.944e-06) * s0_0_0;
	r0 += M4(5.613e-02, -7.050e-02, 2.572e-02, -3.107e-02, -3.133e-02, -1.368e-02, -5.405e-03, 1.776e-02, 1.275e-01, -4.409e-02, -9.379e-04, -6.070e-03, -1.693e-02, -5.034e-02, -9.452e-03, -1.027e-02) * s0_0_1;
	r0 += M4(-1.059e-03, 5.893e-03, -1.388e-03, 2.870e-03, 3.175e-03, 7.792e-03, 1.480e-03, 1.882e-03, -1.466e-02, 3.357e-02, -3.984e-03, 3.767e-02, 2.466e-03, 1.126e-02, 2.677e-03, 3.022e-03) * s0_0_2;
	r0 += M4(4.035e-03, 4.674e-04, 3.183e-05, 2.695e-03, -2.244e-02, 1.077e-02, 4.505e-02, 5.603e-03, -1.283e-02, -3.494e-03, -2.801e-02, 4.847e-03, -3.615e-02, -1.468e-02, -5.310e-02, -4.746e-03) * s0_1_0;
	r0 += M4(9.279e-02, -1.115e-01, 9.984e-02, -1.000e-01, 1.279e-02, -1.243e-01, -9.351e-03, -2.297e-01, -7.122e-03, 6.430e-02, 1.200e-01, 2.802e-02, 9.908e-02, 5.175e-02, 6.231e-02, -3.403e-02) * s0_1_1;
	r0 += M4(-3.326e-03, -6.569e-04, -1.069e-03, -7.777e-03, 6.006e-04, 3.893e-03, 1.513e-03, 1.292e-02, -1.328e-04, -1.006e-02, -7.683e-03, -5.587e-03, 1.674e-03, 3.526e-02, 4.918e-03, 3.682e-02) * s0_1_2;
	r0 += M4(-2.024e-03, 1.961e-03, 3.575e-03, 2.140e-03, -1.077e-03, -1.432e-03, -3.457e-02, 2.923e-03, 2.931e-04, -1.575e-03, 3.807e-03, -2.778e-03, -2.256e-03, -3.497e-03, -3.653e-03, -7.691e-03) * s0_2_0;
	r0 += M4(1.455e-02, -3.085e-02, 4.472e-02, -7.931e-02, -1.136e-03, -3.877e-03, 1.535e-02, -2.901e-03, -1.771e-04, 5.621e-03, -6.975e-03, 1.157e-02, 2.131e-03, 5.317e-03, 3.496e-02, 4.285e-02) * s0_2_1;
	r0 += M4(-2.036e-03, 1.136e-02, -1.959e-03, 1.630e-02, 8.789e-05, 9.005e-04, 6.351e-04, 4.626e-03, -1.010e-05, -7.093e-04, 1.785e-04, -2.498e-03, -1.175e-06, 3.132e-04, -5.293e-05, 1.138e-02) * s0_2_2;
	r0 += M4(1.545e-03, -8.186e-04, 1.077e-03, 2.215e-03, -1.453e-01, -8.065e-02, 8.637e-02, 2.019e-02, -5.079e-02, -3.241e-03, 1.007e-03, -1.146e-03, 5.208e-02, -3.451e-03, 3.282e-02, -2.869e-03) * s1_0_0;
	r0 += M4(-9.484e-02, -4.970e-02, -9.581e-03, -1.689e-02, -3.359e-02, -1.207e-01, 4.971e-02, 8.796e-02, -1.988e-01, -1.941e-01, 2.465e-04, 9.233e-04, -3.086e-02, 1.635e-01, -6.417e-02, -5.135e-02) * s1_0_1;
	r0 += M4(2.774e-05, -4.053e-02, 1.858e-03, 2.065e-04, 1.625e-02, 2.193e-02, 3.767e-03, 1.628e-02, -5.811e-04, -5.296e-02, -1.482e-03, 2.443e-04, -1.699e-03, -6.511e-02, -1.577e-03, -3.538e-03) * s1_0_2;
	r0 += M4(2.020e-02, 2.453e-03, 3.101e-02, 2.346e-03, 4.286e-03, 4.547e-03, 1.195e-02, 8.941e-03, -2.298e-03, 2.202e-03, 2.572e-02, 1.599e-03, -1.302e-02, -2.739e-03, -6.534e-03, -2.512e-03) * s1_1_0;
	r0 += M4(7.251e-02, 6.419e-02, -2.920e-02, 5.172e-02, 2.183e-02, 8.120e-03, -7.192e-02, -9.847e-03, -2.651e-03, 1.095e-03, 2.095e-01, 1.794e-01, -2.447e-02, -3.552e-02, 1.421e-01, 5.476e-02) * s1_1_1;
	r0 += M4(1.249e-03, 2.362e-02, -1.859e-02, -6.218e-02, 1.266e-02, 2.367e-02, -3.706e-02, -8.421e-02, 1.568e-03, -6.153e-03, 3.942e-03, 5.810e-02, 3.487e-03, -9.519e-03, -5.778e-03, 4.230e-02) * s1_1_2;
	r0 += M4(-4.430e-04, -4.993e-04, 5.169e-03, -2.171e-04, -3.560e-04, -2.059e-04, -4.001e-04, 3.124e-04, -3.585e-05, -1.369e-05, -1.182e-03, 7.230e-05, 3.776e-04, 2.757e-04, -2.778e-03, 1.072e-04) * s1_2_0;
	r0 += M4(1.077e-03, -1.383e-05, 2.429e-02, 1.647e-02, -5.793e-04, -4.412e-05, -1.407e-03, -2.823e-03, 2.679e-05, 1.478e-05, -1.723e-03, -1.578e-03, -2.985e-04, -9.572e-05, -6.509e-03, -7.671e-03) * s1_2_1;
	r0 += M4(-5.266e-04, 3.276e-04, 2.202e-03, 1.169e-02, 4.961e-04, 2.801e-04, 6.590e-03, 6.087e-03, 7.456e-07, -1.046e-05, 8.881e-04, 4.920e-05, -2.628e-05, 1.514e-04, -2.440e-03, -2.362e-03) * s1_2_2;
	s0_0_0 = G[2][xy.y+0][xy.x+0]; s0_0_1 = G[2][xy.y+0][xy.x+1];
	s0_0_2 = G[2][xy.y+0][xy.x+2]; s0_1_0 = G[2][xy.y+1][xy.x+0];
	s0_1_1 = G[2][xy.y+1][xy.x+1]; s0_1_2 = G[2][xy.y+1][xy.x+2];
	s0_2_0 = G[2][xy.y+2][xy.x+0]; s0_2_1 = G[2][xy.y+2][xy.x+1];
	s0_2_2 = G[2][xy.y+2][xy.x+2]; s1_0_0 = G[3][xy.y+0][xy.x+0];
	s1_0_1 = G[3][xy.y+0][xy.x+1]; s1_0_2 = G[3][xy.y+0][xy.x+2];
	s1_1_0 = G[3][xy.y+1][xy.x+0]; s1_1_1 = G[3][xy.y+1][xy.x+1];
	s1_1_2 = G[3][xy.y+1][xy.x+2]; s1_2_0 = G[3][xy.y+2][xy.x+0];
	s1_2_1 = G[3][xy.y+2][xy.x+1]; s1_2_2 = G[3][xy.y+2][xy.x+2];
	r0 += M4(-1.060e-03, 2.535e-03, 5.493e-04, 1.219e-03, -1.248e-02, 2.046e-03, -7.873e-04, -9.479e-04, 1.185e-03, 5.142e-05, 2.132e-03, 2.803e-04, -1.214e-02, 3.888e-03, 1.087e-03, 1.074e-03) * s0_0_0;
	r0 += M4(4.424e-02, 6.644e-02, -6.406e-03, -1.037e-03, -5.457e-03, -1.915e-02, -2.248e-03, -2.135e-03, 2.158e-03, 7.147e-03, 5.900e-05, 1.225e-03, -2.908e-03, -6.559e-03, 7.360e-04, 3.265e-03) * s0_0_1;
	r0 += M4(-3.651e-03, -5.784e-03, -8.675e-04, -4.076e-03, -4.900e-03, -4.854e-03, 1.361e-04, -1.935e-04, -1.189e-03, -9.339e-04, -9.206e-05, -1.028e-03, -1.069e-06, -2.392e-03, 5.217e-05, 3.294e-05) * s0_0_2;
	r0 += M4(3.978e-03, 9.116e-03, -7.424e-03, 9.582e-03, -8.504e-02, 1.486e-02, 6.938e-02, -5.911e-03, 2.458e-02, 9.293e-03, -1.645e-02, -6.174e-04, -1.732e-01, 1.725e-02, -6.665e-02, 9.048e-03) * s0_1_0;
	r0 += M4(7.022e-02, -4.919e-02, 2.259e-01, -2.190e-01, -1.537e-01, -2.509e-01, 7.195e-02, 1.535e-01, 1.477e-01, -2.880e-01, 1.376e-02, 8.808e-02, -7.189e-03, 1.234e-01, -1.784e-03, 7.023e-03) * s0_1_1;
	r0 += M4(3.044e-04, 9.852e-03, -6.347e-03, 1.861e-02, 1.846e-03, -1.049e-02, -4.269e-03, 5.458e-03, -2.652e-05, 2.346e-02, -4.957e-04, -4.900e-03, -1.269e-05, -2.313e-03, -9.595e-05, -3.213e-03) * s0_1_2;
	r0 += M4(-3.846e-04, -6.699e-04, 5.213e-03, 3.646e-03, 2.560e-04, -3.294e-03, -4.038e-03, -1.334e-02, 1.681e-03, 3.438e-04, 2.145e-02, -2.734e-04, -4.391e-03, -5.181e-03, -1.207e-01, 1.383e-02) * s0_2_0;
	r0 += M4(5.273e-03, 1.092e-02, 8.463e-03, 2.725e-02, 8.895e-03, 6.525e-03, 1.618e-02, 2.617e-02, 7.850e-04, 1.226e-02, -1.635e-02, -1.592e-02, 2.555e-03, 1.049e-02, -5.855e-03, 9.302e-02) * s0_2_1;
	r0 += M4(1.150e-03, -8.499e-04, -2.320e-03, -1.261e-03, -1.771e-03, 4.677e-03, -1.879e-03, 3.410e-03, 3.552e-04, -6.901e-04, 2.529e-03, 6.008e-03, 1.309e-05, 4.045e-04, 3.927e-05, -9.979e-05) * s0_2_2;
	r0 += M4(1.668e-02, -7.706e-04, 9.803e-03, -1.069e-05, 6.840e-03, 4.994e-08, 3.067e-06, -7.422e-07, 1.411e-02, 4.596e-04, 6.494e-04, 2.699e-04, -9.607e-03, -9.975e-04, 1.374e-03, 1.456e-04) * s1_0_0;
	r0 += M4(-1.003e-01, 8.470e-02, -3.173e-02, 2.166e-02, 1.999e-02, 2.020e-02, 8.128e-07, 3.879e-06, -2.412e-02, 2.850e-02, 7.184e-03, -8.497e-04, 1.995e-02, 5.081e-03, 4.351e-04, -2.336e-03) * s1_0_1;
	r0 += M4(3.066e-03, -1.260e-02, 7.867e-04, -1.182e-02, -3.244e-07, 6.764e-03, -6.940e-08, 8.716e-06, -2.570e-03, -1.717e-02, -1.341e-03, -6.410e-04, 5.519e-05, 8.928e-03, -1.973e-05, 2.064e-04) * s1_0_2;
	r0 += M4(1.500e-02, -2.446e-03, 1.898e-02, -2.090e-03, 1.986e-02, 2.928e-06, 1.984e-02, 2.244e-06, 4.505e-02, 4.155e-04, 4.405e-02, -8.526e-04, -5.403e-02, -2.004e-03, -4.145e-02, -7.467e-03) * s1_1_0;
	r0 += M4(-1.447e-01, 1.159e-01, -1.669e-01, 1.615e-01, 5.816e-02, 5.798e-02, 5.823e-02, 5.809e-02, -1.576e-01, 1.030e-01, -1.587e-01, 1.047e-01, 7.255e-02, -1.183e-01, 7.494e-02, -1.430e-02) * s1_1_1;
	r0 += M4(3.641e-03, 1.906e-03, 2.154e-03, -8.694e-03, 7.510e-07, 2.045e-02, 3.622e-07, 2.035e-02, 2.250e-03, -5.237e-02, 8.443e-04, -4.311e-02, 2.706e-03, 3.555e-02, -1.133e-05, 2.628e-02) * s1_1_2;
	r0 += M4(2.430e-03, -1.789e-04, 5.080e-03, -1.721e-03, 1.424e-06, -7.387e-07, 6.772e-03, 4.290e-07, 8.539e-04, 2.951e-04, 1.462e-02, 1.145e-03, -1.767e-03, 1.098e-03, -2.422e-02, 2.415e-04) * s1_2_0;
	r0 += M4(-9.637e-03, 5.332e-03, -5.577e-02, 3.553e-02, 8.063e-08, 4.811e-07, 2.020e-02, 2.020e-02, 7.056e-03, 3.129e-03, -2.338e-02, 3.301e-02, -8.347e-03, -1.310e-02, -2.093e-03, -8.102e-02) * s1_2_1;
	r0 += M4(1.522e-04, -6.102e-03, 2.881e-03, 1.327e-03, -2.320e-07, 5.234e-07, -4.447e-07, 7.066e-03, -1.453e-03, -3.328e-03, -5.980e-04, -2.640e-02, -1.498e-03, -3.165e-04, 5.049e-04, 1.105e-02) * s1_2_2;
	s0_0_0 = G[4][xy.y+0][xy.x+0]; s0_0_1 = G[4][xy.y+0][xy.x+1];
	s0_0_2 = G[4][xy.y+0][xy.x+2]; s0_1_0 = G[4][xy.y+1][xy.x+0];
	s0_1_1 = G[4][xy.y+1][xy.x+1]; s0_1_2 = G[4][xy.y+1][xy.x+2];
	s0_2_0 = G[4][xy.y+2][xy.x+0]; s0_2_1 = G[4][xy.y+2][xy.x+1];
	s0_2_2 = G[4][xy.y+2][xy.x+2]; s1_0_0 = G[5][xy.y+0][xy.x+0];
	s1_0_1 = G[5][xy.y+0][xy.x+1]; s1_0_2 = G[5][xy.y+0][xy.x+2];
	s1_1_0 = G[5][xy.y+1][xy.x+0]; s1_1_1 = G[5][xy.y+1][xy.x+1];
	s1_1_2 = G[5][xy.y+1][xy.x+2]; s1_2_0 = G[5][xy.y+2][xy.x+0];
	s1_2_1 = G[5][xy.y+2][xy.x+1]; s1_2_2 = G[5][xy.y+2][xy.x+2];
	r0 += M4(-1.078e-03, -1.524e-04, -1.367e-03, 4.842e-04, -2.770e-02, -2.753e-03, -2.497e-02, 7.572e-04, 5.608e-04, -1.275e-03, -1.049e-04, 2.214e-04, 3.308e-02, 2.288e-04, 1.162e-03, 1.248e-03) * s0_0_0;
	r0 += M4(1.911e-02, -8.652e-03, -5.965e-03, -1.977e-03, -7.425e-02, -8.793e-02, -5.284e-02, -6.999e-02, 1.133e-02, 4.019e-03, 3.354e-03, 1.357e-03, 6.749e-02, 8.420e-02, 2.022e-03, 3.041e-03) * s0_0_1;
	r0 += M4(-2.714e-03, 3.845e-02, 1.805e-04, 5.321e-03, -1.979e-03, -2.239e-02, 5.083e-04, -8.504e-03, 3.814e-03, 1.101e-02, -2.933e-04, 5.986e-04, 5.863e-03, 2.949e-02, -1.434e-04, 6.012e-04) * s0_0_2;
	r0 += M4(4.169e-03, 1.617e-04, 1.689e-03, -1.503e-04, -4.056e-03, -6.177e-04, -1.317e-02, -1.197e-03, 2.353e-02, -2.044e-03, 2.360e-02, -1.121e-03, -2.110e-02, 2.081e-03, -3.747e-02, -4.905e-03) * s0_1_0;
	r0 += M4(-1.321e-01, -2.329e-03, -7.563e-02, -2.142e-02, 5.104e-04, -3.422e-03, -1.821e-02, -2.463e-02, 9.277e-02, 1.086e-01, 7.395e-02, 8.130e-02, -9.098e-02, -9.850e-02, 1.243e-01, 2.113e-02) * s0_1_1;
	r0 += M4(7.467e-03, 1.109e-01, 2.510e-03, 1.507e-01, -1.387e-04, 1.349e-04, -3.090e-04, -9.983e-03, -1.645e-03, 1.389e-02, 6.161e-03, 2.163e-02, 7.860e-03, -5.085e-03, 9.179e-03, 7.078e-02) * s0_1_2;
	r0 += M4(1.080e-04, 2.690e-05, 1.838e-03, 3.743e-06, 4.030e-06, 8.019e-06, -1.391e-03, -6.015e-04, -6.603e-04, 2.906e-04, 6.345e-03, -1.479e-03, 1.376e-03, 1.403e-04, -6.712e-03, 5.674e-04) * s0_2_0;
	r0 += M4(-1.043e-03, -3.743e-03, -3.233e-02, 7.497e-04, -1.820e-04, -3.946e-04, -1.729e-03, -2.021e-03, -3.122e-04, -2.715e-03, 1.034e-02, 1.340e-02, -1.375e-04, 3.028e-03, -3.740e-02, -1.788e-02) * s0_2_1;
	r0 += M4(9.002e-04, 6.100e-03, 2.541e-03, 1.696e-02, 6.234e-07, 1.713e-05, -4.769e-05, -4.988e-04, 4.978e-04, 1.985e-04, 6.781e-04, 3.775e-03, -3.587e-04, -1.376e-03, -4.243e-03, -1.922e-02) * s0_2_2;
	r0 += M4(5.175e-02, 1.947e-03, -3.483e-04, 4.818e-04, -6.732e-03, -5.785e-08, -1.619e-06, 1.505e-06, 9.433e-03, -8.350e-04, 6.258e-04, -6.883e-05, 2.730e-03, 3.035e-04, 3.375e-03, -2.248e-04) * s1_0_0;
	r0 += M4(1.782e-01, 1.807e-01, -4.108e-04, 3.519e-03, -1.874e-02, -1.859e-02, 2.489e-06, 7.147e-06, 3.870e-02, 2.949e-02, -2.470e-04, 6.339e-04, 3.165e-02, 4.610e-03, 8.861e-03, -2.039e-04) * s1_0_1;
	r0 += M4(-2.476e-05, 4.309e-02, 8.255e-04, -3.920e-03, -4.662e-06, -6.814e-03, 3.499e-08, -1.345e-05, 7.650e-03, 2.203e-02, -6.718e-04, -1.610e-03, 1.192e-02, -1.966e-01, 1.720e-02, 1.765e-02) * s1_0_2;
	r0 += M4(-1.330e-04, -2.820e-05, -3.870e-02, 5.487e-05, -1.947e-02, -3.264e-06, -1.971e-02, -2.542e-06, 4.606e-02, 1.365e-03, 2.978e-02, 1.209e-03, -3.050e-05, -3.187e-05, 3.928e-03, 4.877e-04) * s1_1_0;
	r0 += M4(-5.124e-04, -1.436e-03, -2.287e-01, -2.159e-01, -5.554e-02, -5.495e-02, -5.530e-02, -5.482e-02, -1.145e-01, 1.041e-02, 8.800e-02, 9.823e-02, 4.989e-04, 5.237e-03, -7.269e-03, -9.853e-03) * s1_1_1;
	r0 += M4(6.408e-04, 1.407e-03, 9.663e-04, -4.418e-02, 1.011e-06, -1.918e-02, -1.777e-06, -1.947e-02, -6.976e-03, -7.738e-02, -6.193e-04, 9.474e-03, 2.193e-03, -5.267e-03, -8.250e-03, 1.849e-01) * s1_1_2;
	r0 += M4(1.181e-05, 1.007e-05, 2.615e-03, 2.958e-04, -3.020e-07, 6.689e-07, -6.892e-03, -1.370e-05, -5.115e-03, 5.280e-04, -1.126e-02, 1.679e-03, -1.717e-06, -1.742e-06, 1.761e-04, -4.536e-07) * s1_2_0;
	r0 += M4(-1.432e-05, -1.833e-04, 6.178e-05, 7.828e-04, 5.660e-07, 4.049e-05, -1.909e-02, -1.874e-02, -1.032e-03, -7.600e-03, -7.184e-02, -8.719e-02, -5.807e-04, 7.194e-04, -1.494e-03, 1.774e-03) * s1_2_1;
	r0 += M4(-5.091e-07, -3.839e-06, 8.156e-04, 7.769e-05, 3.881e-08, -4.499e-05, 2.147e-07, -6.793e-03, 2.018e-03, 1.743e-03, 1.909e-03, -1.265e-02, -1.166e-04, -2.080e-04, -1.100e-03, -3.133e-03) * s1_2_2;
	s0_0_0 = G[6][xy.y+0][xy.x+0]; s0_0_1 = G[6][xy.y+0][xy.x+1];
	s0_0_2 = G[6][xy.y+0][xy.x+2]; s0_1_0 = G[6][xy.y+1][xy.x+0];
	s0_1_1 = G[6][xy.y+1][xy.x+1]; s0_1_2 = G[6][xy.y+1][xy.x+2];
	s0_2_0 = G[6][xy.y+2][xy.x+0]; s0_2_1 = G[6][xy.y+2][xy.x+1];
	s0_2_2 = G[6][xy.y+2][xy.x+2]; s1_0_0 = G[7][xy.y+0][xy.x+0];
	s1_0_1 = G[7][xy.y+0][xy.x+1]; s1_0_2 = G[7][xy.y+0][xy.x+2];
	s1_1_0 = G[7][xy.y+1][xy.x+0]; s1_1_1 = G[7][xy.y+1][xy.x+1];
	s1_1_2 = G[7][xy.y+1][xy.x+2]; s1_2_0 = G[7][xy.y+2][xy.x+0];
	s1_2_1 = G[7][xy.y+2][xy.x+1]; s1_2_2 = G[7][xy.y+2][xy.x+2];
	r0 += M4(1.030e-02, -8.319e-04, -4.187e-03, -5.104e-04, -1.427e-03, 2.626e-03, 2.134e-03, 1.303e-05, 3.459e-03, 1.508e-04, -1.222e-03, -4.931e-05, -6.461e-03, -2.066e-03, 3.792e-04, 3.567e-04) * s0_0_0;
	r0 += M4(7.216e-02, 8.030e-02, 7.012e-03, -7.228e-03, -1.505e-01, -2.883e-02, -3.075e-03, 1.850e-02, 9.932e-03, 1.229e-03, -2.195e-03, -2.840e-04, 6.238e-03, -5.080e-03, 3.426e-03, 3.559e-03) * s0_0_1;
	r0 += M4(-6.656e-03, -2.426e-02, 4.374e-03, -4.846e-03, 1.037e-02, 6.421e-03, -7.319e-03, -1.517e-02, 1.751e-03, -7.848e-03, 6.326e-04, -1.403e-03, -1.218e-02, -5.810e-03, 1.611e-03, 4.208e-03) * s0_0_2;
	r0 += M4(4.962e-02, 1.485e-02, 6.421e-02, -4.843e-03, -1.243e-02, -1.199e-02, -5.508e-02, 1.257e-02, 1.717e-02, 3.141e-04, -4.962e-03, 6.979e-04, 6.438e-02, 4.753e-03, -6.167e-02, -9.569e-03) * s0_1_0;
	r0 += M4(3.050e-02, -1.715e-01, -2.441e-01, 1.376e-01, 3.894e-02, 8.812e-02, 7.361e-02, -2.214e-01, -3.818e-01, 8.724e-02, 7.788e-02, -1.834e-02, 1.516e-01, 1.723e-01, -1.651e-01, -1.686e-01) * s0_1_1;
	r0 += M4(6.291e-03, 5.089e-02, 4.378e-03, -5.628e-02, -1.804e-03, -2.377e-03, 3.379e-03, 3.625e-02, 8.307e-03, 2.000e-02, -9.842e-03, -5.541e-02, 7.114e-03, 3.967e-02, -3.825e-03, -6.080e-02) * s0_1_2;
	r0 += M4(-5.691e-03, 6.707e-03, -1.208e-02, -3.723e-04, 3.031e-03, -1.201e-03, 2.609e-02, 1.895e-02, 4.705e-03, -1.829e-04, 4.076e-03, 8.790e-04, -3.666e-03, -3.512e-03, 8.047e-03, 2.054e-04) * s0_2_0;
	r0 += M4(-1.168e-03, 2.735e-03, 2.692e-02, -1.297e-02, -5.172e-04, -3.097e-04, -4.751e-03, 8.007e-03, -3.170e-03, -1.026e-02, 9.041e-03, -2.971e-02, -4.446e-03, -3.259e-03, -8.502e-03, 6.750e-03) * s0_2_1;
	r0 += M4(-8.568e-04, 3.947e-04, -2.243e-04, 4.159e-03, 3.024e-06, -1.928e-04, -1.979e-03, -1.114e-04, -6.541e-04, -1.403e-03, -8.882e-03, -1.507e-03, -5.137e-04, -2.269e-03, 3.152e-03, -8.719e-04) * s0_2_2;
	r0 += M4(-4.640e-03, 5.238e-04, -1.069e-03, -5.050e-04, 1.970e-04, 2.231e-05, 1.496e-03, 9.532e-06, 5.016e-04, 2.348e-03, 2.129e-03, 9.854e-06, -1.266e-03, 1.335e-03, 5.471e-03, -8.963e-04) * s1_0_0;
	r0 += M4(-3.637e-02, -9.250e-03, 2.590e-04, 8.140e-03, 1.312e-02, 1.080e-04, -7.938e-05, 6.356e-04, -4.483e-02, -2.355e-02, 3.677e-04, 8.941e-04, -6.037e-03, -3.073e-02, 9.307e-03, 3.011e-03) * s1_0_1;
	r0 += M4(-9.059e-03, -3.550e-02, -1.282e-03, 1.134e-02, 6.619e-04, -1.420e-02, -9.081e-04, -2.429e-04, -2.582e-03, -2.775e-02, -1.638e-03, -1.874e-04, -1.895e-03, 1.884e-02, -6.878e-04, -1.013e-03) * s1_0_2;
	r0 += M4(-4.470e-03, -3.720e-04, -1.883e-03, 2.378e-05, -1.531e-03, -1.786e-04, -1.020e-03, -2.860e-05, -2.894e-02, -4.611e-03, -1.376e-02, 2.116e-03, -8.051e-03, -1.937e-03, 5.938e-03, 3.111e-03) * s1_1_0;
	r0 += M4(1.444e-02, -1.365e-02, 7.220e-02, 8.638e-03, 2.280e-01, -9.264e-04, 1.619e-01, 8.409e-04, 6.950e-02, -5.475e-03, -1.270e-01, -1.022e-01, 5.923e-02, -9.192e-03, -4.162e-01, 5.015e-02) * s1_1_1;
	r0 += M4(-6.164e-02, 7.888e-02, 1.109e-02, -3.267e-01, -3.135e-03, -2.319e-01, -2.068e-03, -1.708e-01, -6.101e-03, 3.601e-02, 3.472e-03, -2.544e-02, -1.023e-02, -5.609e-02, 1.498e-02, 3.177e-02) * s1_1_2;
	r0 += M4(-2.274e-04, 7.967e-06, -1.255e-03, -1.832e-06, 1.325e-03, 1.587e-04, -5.742e-04, 1.952e-05, 4.880e-03, 2.556e-03, 1.330e-02, 3.467e-03, 1.309e-03, 2.155e-04, -1.783e-03, -9.398e-04) * s1_2_0;
	r0 += M4(-2.480e-03, -5.469e-04, -5.037e-03, -4.451e-03, 7.095e-03, 2.901e-03, 8.561e-02, 4.900e-04, 1.316e-03, 6.108e-03, 5.188e-02, 4.865e-02, -2.738e-04, 8.981e-04, 2.130e-02, -3.509e-03) * s1_2_1;
	r0 += M4(1.866e-03, -9.608e-04, 1.278e-03, 9.991e-03, -1.326e-03, -1.197e-04, -2.043e-03, -7.145e-02, -1.264e-05, -6.483e-06, 4.437e-03, 2.047e-02, 2.116e-04, 1.559e-03, 4.980e-04, -5.663e-03) * s1_2_2;
	r0 += V4(-2.188e-11, 1.798e-11, -3.440e-10, -2.080e-11);
	r0 = r0;
	vec2 opt = 0.5 * LUMA_pt;
	vec2 fpos = (vec2(opos) + vec2(0.5)) * opt;
	imageStore(out_image, opos + ivec2(0, 0), vec4(r0.x + LUMA_tex(fpos + vec2(0.0, 0.0) * opt).r, 0.0, 0.0, 1.0));
	imageStore(out_image, opos + ivec2(1, 0), vec4(r0.y + LUMA_tex(fpos + vec2(1.0, 0.0) * opt).r, 0.0, 0.0, 1.0));
	imageStore(out_image, opos + ivec2(0, 1), vec4(r0.z + LUMA_tex(fpos + vec2(0.0, 1.0) * opt).r, 0.0, 0.0, 1.0));
	imageStore(out_image, opos + ivec2(1, 1), vec4(r0.w + LUMA_tex(fpos + vec2(1.0, 1.0) * opt).r, 0.0, 0.0, 1.0));
}
